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