В моем приложении ASP.NET - с включенным ViewState - я могу сбросить ввод, просто установив их снова. Вот основной простой пример, который работает:ViewState перезаписывает изменения динамически добавленного UserControl (в Placeholder) на PostBack
_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
будет связан с "А" , «B» и «C» на Page_Load
, и он всегда будет выбирать «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
для целей тестирования, но интересно, что помнит мой выбор.
Что можно сделать, чтобы исправить это?