鉴于以下代码,任何人都可以解释,如果视图状态被禁用并且在视图状态完成跟踪值之后正在构造控件,那么下拉列表如何在回发中记住其选定值。
DropDownList ddl;
protected void Page_Load(object sender, EventArgs e)
{
ddl = new DropDownList() {AutoPostBack = true, EnableViewState = false, ViewStateMode = ViewStateMode.Disabled };
ddl.Items.Add(new ListItem("1"));
ddl.Items.Add(new ListItem("2"));
div.Controls.Add(ddl);
}
答案 0 :(得分:1)
控件使用ControlState,它与ViewState分开。但在实施方面类似。
答案 1 :(得分:1)
Viewstate不用于保留发布到服务器的值。它可以用于保留上次在viewstate中向客户端提供的值时选择的值,但这只能生成服务器端事件,例如selectedindexchanged。但是它的当前值取决于控件发布到服务器的内容。 DropDownList实现IPostBackDataHandler,“定义ASP.NET服务器控件必须实现的方法以自动加载回发数据。”
同样,不从ViewState检索DropDownList的当前值,而是从发布的表单值中检索它。如果您不需要它来维护其值,请在将其添加到控制树后将其选定的索引设置为0(或默认索引为)。添加之后,重要的是您将其添加到控制树中时将加载已发布的值。