控制添加PostBack问题

时间:2010-01-11 14:03:50

标签: asp.net controls postback add

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

那么如何添加控件?

4 个答案:

答案 0 :(得分:1)

因为您必须在每次回发时重新创建控件, see this article

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

在Page的Init事件中添加控件,在回发时它们将保存在viewstate中。确保他们有唯一的ID。

请参阅此链接...

ASP.NET Add Control on postback

一个非常简单的例子..

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
    }
}

答案 3 :(得分: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");
}