簡體   English   中英

Dropdown.SelectedIndex在Page_Load事件中沒有正確的值,但在Render事件中具有正確的值

[英]Dropdown.SelectedIndex doesnt have the correct value in the Page_Load event, but has the correct value in the Render event

我在用戶控件中有一個aspnet下拉列表。 此用戶控件將加載到webform中。 此頁面上還有一個提交按鈕。 在回發時,selectedItem在Page_load處理程序中未顯示正確的值,但在預渲染和呈現處理程序中顯示正確的值。 我的印象是viewstate設置在page_load之前。

您可能在pre_render和page_load之間重新綁定了下拉列表的數據。 就像事件所說的那樣,pre_render允許您在呈現頁面上的任何控件之前執行操作。 因此,一旦您的頁面呈現(在page_load之前),它就會對您的下拉列表進行數據綁定並刪除您選擇的值。

解決此問題的最簡單方法是僅在需要綁定下拉列表時將其綁定到代碼中,例如第一次加載頁面而不是在回發頁面時。

if (!IsPostBack)
{
    //Do all of your data binding here
    DataBind();
}

這是最好的解決方案。 它正確地理解了Page Life Cycle! 諸如下拉列表之類的回發控件將恢復其發布狀態(已發布的下拉列表中的所選項目)。 它會忘記它的選定值,因為您是在Page_Load事件中重新綁定它的,該事件是在下拉列表已加載了發布值之后進行的(因為View State是在Page_Init事件之后和Page_Load事件之前加載的)。 在Page_Load事件的重新綁定中,下拉列表會忘記其已還原的選定項目。 最好的解決方案是在Page_Init事件中執行數據綁定而不是Page_Load事件。

做類似下面的事情......

假設下拉列表名稱是lstStates。

protected void Page_Init(object sender, EventArgs e)
{
   lstStates.DataSource = QueryDatabase(); //Just an example.
   lstStates.DataTextField = "StateName";    
   lstStates.DataValueField = "StateCode"; 
   lstStates.DataBind();
}

ASP.NET在Page_Init事件之后和Page_Load事件之前加載控件的View State,因此Drop Down List的selectedIndex不會受到影響,您將獲得理想的結果!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM