如何保留动态创建的控件?

时间:2011-01-25 10:50:27

标签: asp.net

我希望在回发发生时保留动态创建的控件。

protected void Page_Load(object sender, EventArgs e)
{

}

private void CreateTable()
{
    HtmlTableRow objHtmlTblRow = new HtmlTableRow();
    HtmlTableCell objHtmlTableCell = new HtmlTableCell();
    objHtmlTableCell.Controls.Add(new TextBox());
    objHtmlTblRow.Cells.Add(objHtmlTableCell);
    mytable.Rows.Add(objHtmlTblRow);
    this.SaveControlState();
  //  this.Controls.Add(mytable);
}
protected void Button1_Click(object sender, EventArgs e)
{
    CreateTable();
}
  

可以通过在Page_Load中调用CreateTable()来实现。有没有其他方法可以保留控件

由于

2 个答案:

答案 0 :(得分:1)

您可以在创建列表时将它们添加到列表中,并将列表保存到会话中。在回发(Page_Load)上将它们从会话加载到您的页面。

答案 1 :(得分:0)

以下代码应该可以使用

  protected void Page_PreInit(object sender, EventArgs e)
{
    Control myControl = GetPostBackControl(this.Page);
}

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    CreateTable()

}


public static Control GetPostBackControl(Page thisPage)
{

    Control ctrlPostedback = null;
    string ctrlName = thisPage.Request.Params.Get("__EVENTTARGET");
    if (!String.IsNullOrEmpty(ctrlName))
    {
        ctrlPostedback = thisPage.FindControl(ctrlName);
    }
    else
    {
        foreach (string Item in thisPage.Request.Form)
        {
            Control c = thisPage.FindControl(Item);
            if (((c) is System.Web.UI.WebControls.Button))
            {
                ctrlPostedback = c;
            }
        }

    }
    return ctrlPostedback;
}

代码适用于UpdatePanel 参考:http://www.asp.net/ajax/videos/how-to-dynamically-add-controls-to-a-web-page