2012-02-10 37 views
1

編輯:解決。嘗試將DataTable綁定到DDL意外發生兩次,而未檢查頁面的PostBack狀態。一旦多餘的嘗試綁定被解決,問題就消失了。感謝大家的幫助。ASP.NET DropDownList錯誤 - SelectedItem/Value從不更新

我有一個aspx頁面和該功能後面的一些代碼一個下拉列表(ddlLocationState)或美國國家按字母順序。但是,無論選擇哪個項目,如果我執行ddlLocationState.SelectedItem/Value/Index,它總是「阿拉斯加」和「0」。每一次。即使在SelectedIndexChange事件處理程序中。

這裏的地方的DDL在aspx頁面中聲明(這是它唯一的參考頁面):

<tr> 
    <td>&nbsp;</td> 
    <td class="textBlue"><label>State: </label></td> 
    <td> 
     <asp:DropDownList runat="server" ID="ddlLocationState" style="width: 250px;"/> 
    </td> 
</tr> 

下面的代碼,其中DDL的內容是設置了: 私人無效BindStates()

private void BindDDL() 
    { 
    //Get all state info: 
    // Populate a DataTable called "sdt" with two columns, name (a state) 
    // and "id" (a number from 0 to 49) 

    //Bind the DataTable "sdt": 
    this.ddlLocationState.DataSource = sdt; 
    this.ddlLocationState.DataTextField = "name"; 
    this.ddlLocationState.DataValueField = "id"; 
    this.ddlLocationState.DataBind(); 
    } 

下面是一些代碼隱藏試圖獲得當前選擇的值:

private void ddlLocationState_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debug.WriteLine("on index changed: " + dlLocationState.SelectedItem.Value.ToString()); 
} 

這裏就是BindDDL被稱爲:

protected void Page_Load(object sender, EventArgs e) 
     { 
     this.pnlLocationMaintenance.Visible = false; 
     this.LocationSortDirection = "asc"; 
     this.LocationSortField = "address"; 
     this.BindStates(); 
     this.dgLocations.CurrentPageIndex = 0; 
     this.BindLocations(); 

     if (!Page.IsPostBack) 
     { 
      BindDDL(); 
     } 
     ddlLocationState.SelectedIndexChanged += new EventHandler(ddlLocationState_SelectedIndexChanged); 
     } 

爲什麼ddlLocationState.SelectedItem /價值/指數總是相同,即使在選擇指數變化的事件處理程序?

+1

你在調用'BindDDL()'frome頁面加載。如果是,那麼請把它放在if(!postBack)中。 Regards – Scorpion 2012-02-10 13:56:46

+0

@Hayer是的,我剛剛嘗試過,看到相同的行爲。此外,似乎選擇索引更改甚至沒有解僱。我確定在Page_Load中連線這個事件......真的很奇怪。 – kmarks2 2012-02-10 14:00:51

+0

發佈BindDDL被調用的代碼。 – 2012-02-10 14:02:16

回答

2

如果您在page_load上進行數據綁定而不檢查是否處於回髮狀態,則會發生這種情況。這是我從你描述的症狀的假設,這是發生了什麼。

在你pageLoad的(...)方法,你需要: 如果(!Page.IsPostBack){ BindDDL(); }

+0

感謝您的建議。我試過這個無濟於事。我忘記提到的一件事是綁定_seems_工作。即DDL填充DataTable「sdt」中的所有文本。 – kmarks2 2012-02-10 14:00:12

+0

畢竟這是它。我不小心做了兩次DDL綁定,一次沒有檢查頁面PostBack狀態。這是問題所在。一旦另一個嘗試綁定DDL被刪除一切工作。謝謝! – kmarks2 2012-02-10 14:07:17

2

向我們展示您調用BindDDl()的代碼。我的猜測是即使在回發時也調用BindDDl(),所以它重新填充列表並清除選擇。

+0

剛發佈。謝謝。 – kmarks2 2012-02-10 14:04:53

+0

我試圖綁定DDL兩次,而沒有檢查回髮狀態。我刪除了這個冗餘的代碼,一切都很好。謝謝! – kmarks2 2012-02-10 14:08:15

2

您是否在page_load事件中調用BindDDL()方法?如果是的話,你應該檢查請求是否不是回發