控制添加回发问题(Control Add PostBack Problem)

2019-10-19 02:10发布

我加入控制Dynamiclly但是, EASC回发事件我的控制都没有了。 我不能再看到我的控制。

所以,我怎么可以添加控制?

Answer 1:

添加控件在页面的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
    }
}


Answer 2:

因为你必须重新在每个回发的控件, 请参阅本文



Answer 3:

加载控制后,应该始终在其ID属性分配一个唯一的ID的用户控件。 你应该总是重新创建回传用户控件。

为了保持posback数据(即TextBox'es)必须在被覆盖的LoadViewState方法调用base.LoadViewState后加载用户控件 - 回传数据的处理之前。



Answer 4:

添加控件在运行时间和节省回传:

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");
}


文章来源: Control Add PostBack Problem