我有一个aspx页面,其背后的一些代码是按字母顺序排列的下拉列表(ddlLocationState)或US状态。但无论选择哪个项目,如果我执行ddlLocationState.SelectedItem / Value / Index,它总是“Alaska”和“0”。每一次。甚至在SelectedIndexChange事件处理程序中。
这是在aspx页面中声明DDL的地方(这是页面中唯一的引用):
<tr>
<td> </td>
<td class="textBlue"><label>State: </label></td>
<td>
<asp:DropDownList runat="server" ID="ddlLocationState" style="width: 250px;"/>
</td>
</tr>
以下是设置DDL内容的代码: private void 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 / Value / Index 总是相同,即使在选定的索引更改事件处理程序中也是如此?
答案 0 :(得分:2)
如果您在page_load上进行数据绑定而不检查是否处于回发状态,则会发生这种情况。根据您描述的症状,我的假设是这就是正在发生的事情。
在您的PageLoad(...)方法中,您需要: if(!Page.IsPostBack) { BindDDL(); }
答案 1 :(得分:2)
向我们展示您调用BindDDl()的代码。我的猜测是你即使在回发时也在调用BindDDl(),所以它会重新填充列表并清除你的选择。
答案 2 :(得分:2)
您是否在page_load事件中调用BindDDL()方法?如果是这样,你应该检查请求是否不是回复