在我的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
将与&#34; A&#34;,&#34; B&#34;绑定。和&#34; C&#34;在Page_Load
,它将始终选择&#34; B&#34;。因此,当您更改选择并提交时,它将被重置。想象一下,这用于重置某些特定条件的控件。
就我而言,我需要在动态加载的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
的选择以用于测试目的,但有趣的是它会记住我的选择。
我该怎么做才能解决这个问题?
答案 0 :(得分:0)
在写这个问题的时候,我来到了解决方案,但决定将其发布给其他人,无论如何。
似乎ASP.NET会在ASPX中定义的控件中加载ViewState
和Page_Init
之间的Page_Load
,同时在{{1}之间加载ViewState
在代码隐藏中加载的控件中的{和Page_Load
。
在Page_LoadComplete
中设置值可解决问题:
Page_LoadComplete