我正在尝试创建一个网页,该网页将根据下拉列表的选定值显示适当的用户控件。
基本上页面布局是这样的:
下拉选择
< 基于下拉选择创建的用户控件 >
I have it half working... the controls are changing when the selection changes. 在 OnInit() 中,我动态创建最后一个选定的控件(其值保存在会话状态中,因为 ViewState 在 OnInit 中不可用)。
当下拉选择发生变化时,我删除了旧的用户控件,并添加了一个新控件。 问题是:从 selection changed 事件中添加了新控件,我无法在第一次回发时保存用户的更改。第一次回发后,从 OnInit 而不是 Change 事件创建选定的控件,并且从那时起保存状态,直到下一次选择更改。
这是 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?控件更改后是否可以强制重新初始化页面?