2

我在 Page_Load 事件中加载了一系列控件。但是,我必须在每次页面加载时重新创建这些控件,这意味着将它们的数据存储在其他地方。这很麻烦。

protected void Page_Load(object sender, EventArgs e)
{
   MyControl control = (MyControl)LoadControl(...);
   control.Initialize(GlobalClass.controlData);
   //^gives the control the data it had previously.  
   //Or use ViewState["controlData"] if serializable.
   Controls.Add(control);
}

我觉得我应该使用if (!IsPostBack) {},但我不知道如何或为什么。

相反,如果我将控件放入标记中,那么控件似乎会保持持久性。例如,标记中的按钮将记住对其 Text 属性的任何更改(我认为?)。

<asp:Button ID="buttonText" runat="server" 
            Text="Text Segment" onclick="buttonText_Click" />

如何通过动态添加的控件(例如通过标记添加的控件)保持某种持久性?这将节省我很多工作和挫败感。

谢谢。

(我已经编写了一小段代码,但是我做的 ASP.NET 越多,我就越困惑。这与我对学习工作的理解完全相反 :-P。)

4

2 回答 2

1

我明白你的意思。是的,这很麻烦,但这就是无状态技术的工作原理。

没有办法实现与静态控件(放在 HTML 标记中的那些)相同的行为。

按照我在这个答案中给出的提示:

访问动态创建的控件 (c#)

于 2010-09-01T17:13:06.400 回答
1

对于动态加载的控件,如果在 Page_Init 事件期间加载它们,则可以将它们添加到 ViewState 中,它们将能够保留从 PostBack 到 PostBack 的状态。

于 2010-09-01T17:44:57.837 回答