Page_Init预渲染控件,Asp.net

本文关键字:控件 Asp net Init Page | 更新日期: 2023-09-27 17:57:38

下午好。

我有一个在Page_Load上动态创建的面板列表。控件是通过Control.Add(p)添加的;方法代码遵循

Panel p = new Panel();
p.ID = "cell_" + i + "_" + j;
p.Attributes.Add("runat", "server");
p.TabIndex = -1;
p.Attributes.Add("class", "box");
p.Attributes.Add("onClick", "clicked(this);");
p.Attributes.Add("onKeypress", "changeValue(event, this);");
p.Style.Add(HtmlTextWriterStyle.Top, top + "%");
p.Style.Add(HtmlTextWriterStyle.Left, left + "%");
p.Attributes.Add("Text", value);
PanelList.Add(p);

这段代码位于for循环中,每个循环都会更改i、j、left、right和value变量。

现在,当我在Page_Load完成之前调用这个函数时:

foreach (Control c in clientGrid.Controls)
{
    Response.Write(c.ClientID.ToString());
}

它成功地写入了所有动态创建的面板的所有客户端ID。

但是,当我在回发时运行foreach函数时,Response.write不会显示任何内容。asp好像忘记了这些面板的存在!

现在我听说在Page_Init()上,控件需要重新呈现!

我不知道该怎么做,在谷歌上搜索了很多之后,似乎找不到答案。

我试着使用递归遍历所有Page.Controls并拉出

System.Web.UI.WebControls.Panel

但仍然没有运气:(

如果我的问题不清楚,我无法提供更多代码和详细信息:)

谢谢

Alex

Page_Init预渲染控件,Asp.net

每次回发时,必须将动态添加的控件重新添加到页面中。我不知道这是否能满足您的逻辑要求,但请确保在(!isPostback)条件之外的page_load方法中添加控件。然后确保在将控件添加到页面后调用用于写出客户端id的逻辑。

如果需要在回发之间存储有关这些控件的状态信息,则可能需要使用一些javascript和隐藏字段。

所有的事件处理程序都应该在Page_Load之后调用,所以如果在Page_Lad中添加控件,应该没问题。OnPreRender有时对这类事情很有用。它在Page_Load之后但在post-back完成之前被调用。