控制值在回发之间保持不变

时间:2011-07-12 14:51:33

标签: c# asp.net

鉴于以下代码,任何人都可以解释,如果视图状态被禁用并且在视图状态完成跟踪值之后正在构造控件,那么下拉列表如何在回发中记住其选定值。

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);
}

2 个答案:

答案 0 :(得分:1)

控件使用ControlState,它与ViewState分开。但在实施方面类似。

ControlState vs. ViewState

答案 1 :(得分:1)

Viewstate不用于保留发布到服务器的值。它可以用于保留上次在viewstate中向客户端提供的值时选择的值,但这只能生成服务器端事件,例如selectedindexchanged。但是它的当前值取决于控件发布到服务器的内容。 DropDownList实现IPostBackDataHandler,“定义ASP.NET服务器控件必须实现的方法以自动加载回发数据。”

同样,不从ViewState检索DropDownList的当前值,而是从发布的表单值中检索它。如果您不需要它来维护其值,请在将其添加到控制树后将其选定的索引设置为0(或默认索引为)。添加之后,重要的是您将其添加到控制树中时将加载已发布的值。