我正在尝试创建一个网页,根据下拉列表的选择值来显示相应的用户控件。
基本上页面布局如下:
下拉选择
< 根据下拉选择创建的用户控件 >
我已经做到了一半...当选择更改时,控件也在改变。在OnInit()中,我动态创建了最后选定的控件(其值保存在会话状态中,因为在OnInit()中ViewState不可用)。
当下拉选择更改发生时,我删除旧的用户控件,并添加一个新的。问题是:由于新控件是从更改事件添加的,我无法在第一次回发中保存用户更改。在第一次回发之后,所选的控件将从OnInit()中创建,然后一直保留状态,直到下次选择更改。
这是SelectionChanged方法:
protected void SelectionChanged(object sender, EventArgs e)
{
SelectedValue = int.Parse(DropDownList.SelectedValue); //Store in Session
Control userControl = GetSpecificUserControl(SelectedValue);
PlaceHolder1.Controls.Clear(); // Remove old user control
PlaceHolder1.Controls.Add(userControl);
}
在SelectionChanged事件发生后,用户对新控件所做的任何更改都不会在接下来的回发中保存。但是,随后的回发将会保存这些更改。此时,该控件在OnInit()中被创建。
是否有一种方法可以在控件更改时强制正确的回发和ViewState?是否可以在控件更改后强制页面重新初始化?