0

我动态添加控制但是;easc 回发事件我的控件不见了。我再也看不到我的控件了。

那么如何添加控件呢?

4

4 回答 4

1

因为您必须在每次回发时重新创建控件, 请参阅这篇文章

于 2010-01-11T14:32:10.133 回答
0

加载控件后,您应该始终在其 ID 属性中为 UserControl 分配一个唯一 ID。而且您应该始终在回发时重新创建 UserControl。

要保留回发数据(即 TextBox'es),您必须在调用 base.LoadViewState 之后在覆盖的 LoadViewState 方法中加载 UserControl - 在处理回发数据之前。

于 2010-01-11T14:36:54.353 回答
0

在 Page 的 Init 事件中添加控件,它们将在回发时保留在视图状态中。确保他们有一个唯一的 ID。

看这个链接...

ASP.NET 在回发时添加控件

一个非常琐碎的例子..

public partial class MyPage : Page
{
    TextBox tb;

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        tb = new TextBox();
        tb.ID = "testtb";
        Page.Form.Controls.Add(tb);
    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        //tb.Text will have whatever text the user entered upon postback
    }
}
于 2010-01-11T15:01:03.260 回答
0

在运行时添加控件并保存回发:

int NumberOfControls = 0;

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        ViewState["b1"] = 0;
    }
    else
    {
        if ((int)ViewState["b1"] > 0)
        {
            CreateBtn();

        }
    }
}


protected void btn1_Click(object sender, EventArgs e)
{
    NumberOfControls = (int)ViewState["b1"];

    Button b1 = new Button();
   // b1.Attributes.Add("onclick", "x()");
    b1.Text = "test2";

    b1.ID = "b1_" + ++NumberOfControls;
    b1.Click +=new  System.EventHandler(btn11);
    Panel1.Controls.Add(b1);
    ViewState["b1"] = NumberOfControls;
}

protected void CreateBtn()
{
    for (int i = 0; i < (int)ViewState["b1"];i++)
    {
        Button b1 = new Button();
        // b1.Attributes.Add("onclick", "x()");
        b1.Text = "test2";
        b1.ID = "b1_" + i;
        b1.Click += new System.EventHandler(btn11);
        Panel1.Controls.Add(b1);
    }
}

protected void btn11(object sender, System.EventArgs e)
{
    Response.Redirect("AboutUs.aspx");
}
于 2012-05-16T15:16:16.043 回答