2011-07-12 28 views
3

給定以下代碼,任何人都可以解釋下拉列表如何記住跨回發選定的值,因爲視圖狀態被禁用,並且在視圖狀態完成跟蹤值後構建控件。控制值持續跨回發

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

ViewState是不使用保留髮布到服務器的值。它可能用於保留上次在viewstate中向客戶端提供服務時所選擇的值,但這隻能用於生成服務器端事件,如selectedindexchanged。但是它的當前值取決於控件發佈到服務器的內容。 DropDownList實現IPostBackDataHandler,其中「定義ASP.NET服務器控件必須實現的方法才能自動加載回發數據」。

此外,DropDownList的當前值不是從ViewState中檢索的,它是從發佈的表單值中檢索的。如果您不需要它來保持其值,則在將其添加到控制樹後,將其選定索引設置爲0(或任何默認索引)。在添加完成後重要的是,您將它添加到控制樹時將會加載已發佈的值。

+0

我認爲你對viewstate有一些誤解。這篇文章http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx非常適合解釋視圖狀態究竟做了什麼,不做什麼 –