在msdn上我们有http://msdn.microsoft.com/en-us/library/ms972976.aspx。 通常,网站的生命周期如下: Initialization-> LoadViewState-> LoadPostBackData->负荷 - > RaisePostBackEvent-> SaveViewState->渲染
我的aspx端有一个占位符,看起来像这样:
<asp:PlaceHolder ID="ph1" runat="server">
<asp:Button OnClick="ClickMe" ID="Button1" runat="server" Text="Button" />
</asp:PlaceHolder>
我在页面加载事件上创建了两个文本框,代码如下所示:
for (int i = 0; i <2; i++)
{
TextBox tb = new TextBox();
tb.ID = "tb" + i.ToString();
tb.Text = "my test string";
ph1.Controls.Add(tb);
}
点击按钮事件如下所示:
protected void ClickMe(object sender, EventArgs e)
{
var mycontrols = ph1.Controls;
}
当我将sommething放入这些文本框并单击按钮时页面被回发但我的文本框保留了输入值,尽管我正在更改页面Load事件上的文本属性。那些控件是在Load事件上动态创建的,它在LoadViewState和LoadPostBackData之后触发,那么它是如何工作的?什么时候控件收到他们的postdata ??
答案 0 :(得分:1)
您对事件顺序的前提有点不对。查看此页面:http://msdn.microsoft.com/en-us/library/aa479328.aspx。你会发现ProcessPostData实际上发生了两次,一次是在PageLoad之前,一次是在处理第一次不存在的动态创建的控件之后。
此外,这是一个常见的误解,这与ViewState有关。它不是。尝试在文本框中设置EnableViewState = false,看看它是否有所作为。