编辑:解决。尝试将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