这让我完全困惑,有人能解释一下吗?
Markup:
<form id="form1" runat="server">
<asp:TextBox runat="server" ID="txtTest" />
<asp:PlaceHolder runat="server" ID="PlaceHolder1" />
<asp:Button runat="server" Text="Click" />
</form>
背后代码:
protected void Page_Load(object sender, EventArgs e)
{
txtTest.Text = "BBB";
PlaceHolder1.Controls.Add(new TextBox() { Text = "AAA" });
}
当我更改两个文本框中的文本,然后单击“单击”按钮时,txtTest 中的文本将恢复为原始值“BBB”(在 page_load 中指定),但动态文本框保留我刚刚输入的值(而不是'AAA'),尽管它与其他“硬编码”文本框同时指定。
txtTest 的值在您的 Page_Load 事件中被覆盖,因此您将看不到 ViewState 值。 ViewState 值在 PreLoad 阶段加载。
动态控件的值接收 ViewState 值,因为您正在设置文本,然后将控件添加到页面。当控件添加到页面时,它将追赶其事件。在此追赶期间,将从 ViewState 加载该值,覆盖您的初始值。
Jeff Cyr 的代码不起作用,因为在退出 Page_Load 之前该控件不会进行追赶。如果您绑定到新 TextBox 的 Load 事件并添加几个 Response.Writes,您就可以看到这一点。
protected void Page_Load(object sender, EventArgs e)
{
txtTest.Text = "BBB";
//PlaceHolder1.Controls.Add(new TextBox() { Text = "AAA" });
TextBox txt = new TextBox();
txt.Load += new EventHandler(txt_Load);
PlaceHolder1.Controls.Add(txt);
Response.Write("page load");
txt.Text = "AAA";
}
void txt_Load(object sender, EventArgs e)
{
Response.Write("textbox load");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)