2013-05-22 114 views
1

我試圖通過一系列查詢來填充我的下拉菜單,我會在頁面加載時自動進行查詢。每當我選擇在下拉列表中選擇價值,我按下一個按鈕,它可以追溯到第一指標,所以我想知道是否有無論如何要防止出現此問題:在頁面加載中填充DropDown

protected void Page_Load(object sender, EventArgs e) 
{ 
    Functions.username = "1"; // This is just to get rid of my login screen for testing puposes 
    DropDownList1.Items.Clear(); 

    Functions.moduledatelister(); 
    for (int i = 0; i <= Functions.moduledatelist.Count-1; i++) { 
    DropDownList1.Items.Add(Functions.moduledatelist.ElementAt(i)); 
    } 

} 

protected void Button2_Click(object sender, EventArgs e) 
{ 
    Label1.Text = Functions.DATES.ElementAt(DropDownList1.SelectedIndex).ToString(); 
} 

按下按鈕後索引回到0,標籤顯示第一個項目的值。

回答

4

一個很好的理解是,你可以通過使用IsPostBack property阻止它。你應該數據綁定您的DropDownList僅在初始加載:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!Page.IsPostBack) 
    { 
     // DataBindDropDown(); 
    } 
} 

狀態通過ViewState默認維護,因此無需重新加載在每次回傳的所有項目。如果再次加載數據源,您還可以防止觸發事件。

+0

非常感謝你:) –

1

Page_Load檢查它是否回發。要了解爲什麼需要的IsPostBack和處理可能出現的類似問題,你需要的ASP.NET Page Life Cycle

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
     return; 

    Functions.username = "1"; // This is just to get rid of my login screen for testing puposes 
    DropDownList1.Items.Clear(); 

    Functions.moduledatelister(); 
    for (int i = 0; i <= Functions.moduledatelist.Count-1; i++) { 
     DropDownList1.Items.Add(Functions.moduledatelist.ElementAt(i)); 
    } 
} 
+0

非常感謝你:) –

1

你必須處理頁面類的IsPostBack屬性:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
    Functions.username = "1"; // This is just to get rid of my login screen for testing puposes 
    DropDownList1.Items.Clear(); 

    Functions.moduledatelister(); 
    for (int i = 0; i <= Functions.moduledatelist.Count-1; i++) { 
    DropDownList1.Items.Add(Functions.moduledatelist.ElementAt(i)); 
    } 
    } 
} 
1

使用IsPostBack方法:

if(!IsPostBack)  
{  
    //enter your dropdownlist items add code here  
} 
相關問題