【发布时间】:2017-01-24 03:29:42
【问题描述】:
在我的 ASP.NET 应用程序中——启用 ViewState——我可以通过简单地重新设置输入来重置输入。这是一个有效的基本简单示例:
_TEST.aspx
<asp:ScriptManager runat="server" />
<asp:DropDownList ID="ddl" runat="server" DataSource='<%# new string[] { "A", "B", "C" } %>' />
<asp:Button ID="b" runat="server" UseSubmitBehavior="false" OnClick="b_Click" Text="Test 1" />
_TEST.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
this.DataBind();
this.ddl.SelectedValue = "B";
}
protected void b_Click(object sender, EventArgs e)
{
Console.WriteLine("Updated");
}
在此示例中,ddl 将与 Page_Load 上的“A”、“B”和“C”绑定,并且始终选择“B”。因此,当您更改选择并提交时,它将被重置。想象一下,这用于在特定条件下重置某些控件。
在我的情况下,我需要动态加载的 UserControl 上的这种行为,该行为被添加到 Placeholder。因为Placeholder 不会保留我需要在每次回发时重新创建控件的内容。 ViewState 似乎没问题。这是一个示例:
_TEST.aspx
<asp:ScriptManager runat="server" />
<asp:PlaceHolder ID="ph" runat="server" />
_TEST.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
_TESTUC uc = (_TESTUC)this.Page.LoadControl("~/Controls/_TESTUC.ascx");
this.ph.Controls.Add(uc);
}
_TESTUC.ascx
<asp:DropDownList ID="ddl" runat="server" DataSource='<%# new string[] { "A", "B", "C" } %>' />
<asp:Button ID="b" runat="server" UseSubmitBehavior="false" OnClick="b_Click" Text="Test 2" />
_TESTUC.ascx.cs
protected void Page_Load(object sender, EventArgs e)
{
this.DataBind();
this.ddl.SelectedValue = "B";
}
protected void b_Click(object sender, EventArgs e)
{
Console.WriteLine("Updated");
}
再次,在每次回发时,我都想重置DropDownList 的选择以进行测试,但有趣的是它会记住我的选择。
我能做些什么来解决这个问题?
【问题讨论】:
标签: c# asp.net webforms viewstate page-lifecycle