2011-07-22 33 views
0

我有疑問回傳後在下拉列表中可用的項目。ASP.NET如何在回發後提供下拉列表項?

我創建了一個自定義Web服務器控件從DropDownList中獲得:

public class StateListControl : DropDownList 
{ 
    public StateListControl() 
    { 
     this.Items.Add(new ListItem("New York", "NY")); 
     this.Items.Add(new ListItem("Nebraska", "NE")); 
     this.Items.Add(new ListItem("Texas", "TX")); 

    } 
} 

我加入了控制到一個頁面時,在Page_Load事件做了以下內容:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     StateListControl1.Items.Add(new ListItem("Michigan", "MI")); 
    } 
} 

現在這個項目會當沒有回傳時被添加。我添加了沒有附加事件的按鈕控件。

現在,當我重複點擊我的按鈕時,第四個條目在每次回傳後都可見。

我的疑問與保存的信息有關,下拉列表中有第四項,當該項僅在第一次請求時添加並且在重複回發後仍然可用?

回答

2

在第一頁加載時,dropdownlist將被填入所有四個值,並且這些值將存儲在viewstate中。當您將頁面發回時,dropdownlist會再次初始化,並從視圖狀態加載值。由於在服務器端加載事件中沒有對下拉列表值進行更改,因此這些值將保留爲視圖狀態下的四個條目。

如果您禁用下拉列表的視圖狀態,您將看到回發時只有3個條目可用,具體取決於初始化代碼是否在每次頁面加載時都運行。

+0

你確定你的回答正確嗎? – Jake

+0

我是積極的人會有其他評論! –

2

控件有一個ControlState(類似於ViewState),它在回發期間保留這些信息。

ControlState vs. ViewState

+0

我不認爲這個答案是正確的。除非明確告知,否則控制狀態不會存儲下拉列表的值。 –

1

當你添加新的列表項 - 它被添加到下拉列表並保存在視圖狀態。