編輯:解決。嘗試將DataTable綁定到DDL意外發生兩次,而未檢查頁面的PostBack狀態。一旦多餘的嘗試綁定被解決,問題就消失了。感謝大家的幫助。ASP.NET DropDownList錯誤 - SelectedItem/Value從不更新
我有一個aspx頁面和該功能後面的一些代碼一個下拉列表(ddlLocationState)或美國國家按字母順序。但是,無論選擇哪個項目,如果我執行ddlLocationState.SelectedItem/Value/Index,它總是「阿拉斯加」和「0」。每一次。即使在SelectedIndexChange事件處理程序中。
這裏的地方的DDL在aspx頁面中聲明(這是它唯一的參考頁面):
<tr>
<td> </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 /價值/指數總是相同,即使在選擇指數變化的事件處理程序?
你在調用'BindDDL()'frome頁面加載。如果是,那麼請把它放在if(!postBack)中。 Regards – Scorpion 2012-02-10 13:56:46
@Hayer是的,我剛剛嘗試過,看到相同的行爲。此外,似乎選擇索引更改甚至沒有解僱。我確定在Page_Load中連線這個事件......真的很奇怪。 – kmarks2 2012-02-10 14:00:51
發佈BindDDL被調用的代碼。 – 2012-02-10 14:02:16