C# 下拉列表重置为第一项,不返回selectedvalue
所以我有一个国家下拉列表和一个州下拉列表,根据所选国家动态填充。当我单击国家/地区时,状态下拉列表填充得很好,但是当我单击另一个下拉列表中的值状态时,问题出现了,列表将返回到列表的第一个项目,而不是保留选定的项目,并且不显示selectedvalueC# 下拉列表重置为第一项,不返回selectedvalue,c#,.net,drop-down-menu,state,country,C#,.net,Drop Down Menu,State,Country,所以我有一个国家下拉列表和一个州下拉列表,根据所选国家动态填充。当我单击国家/地区时,状态下拉列表填充得很好,但是当我单击另一个下拉列表中的值状态时,问题出现了,列表将返回到列表的第一个项目,而不是保留选定的项目,并且不显示selectedvalue <td><asp:DropDownList ID="ddlState" runat="server" DataSourceId="dsStateList" DataTextField="state_nm"
<td><asp:DropDownList ID="ddlState" runat="server"
DataSourceId="dsStateList"
DataTextField="state_nm"
DataValueField="state_cd"
OnSelectedIndexChanged="ddlState_SelectedIndexChanged"
AutoPostBack="true"
AppendDataBoundItems="true"
Width="160px" OnDataBound="ddlState_OnDataBound">
</asp:DropDownList>
</td>
<asp:DropDownList ID="ddlCountry" runat="server"
DataSourceId="dsCountryList"
DataTextField="COUNTRY_NAME"
DataValueField="COUNTRY_CIA_ID"
OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged"
OnDataBound="ddlCountry_OnDataBound"
AutoPostBack="true"
AppendDataBoundItems="true"
Width="160px">
</asp:DropDownList>
protected void ddlState_SelectedIndexChanged(object sender, EventArgs e)
{
string comboStateCODE = ddlState.SelectedValue;
dsCompanyListParam.Text = comboStateCODE;
ddlCountry.DataBind();
ddlState.DataBind();
}
protected void ddlState_OnDataBound(object sender, EventArgs e)
{
ddlState.Items.Insert(0, "Please Select a State");
}
protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
{
ddlState.Items.Clear();
dsStateList.SelectParameters["iCountryID"].DefaultValue = ddlCountry.SelectedValue;
dsCompanyListParam.Text = ddlCountry.SelectedValue;
Trace.Warn("ddlCountry_SelectedIndexChanged");
ddlCountry.DataBind();
ddlState.DataBind();
}
protected void ddlCountry_OnDataBound(object sender, EventArgs e)
{
ddlCountry.Items.Insert(0, "Please Select a Country");
}
您的“国家”下拉列表设置为“自动回发”-是否可能在回发时再次执行填充“国家”下拉列表的代码,从而导致所选状态无效,因为“国家”下拉列表已重新填充我猜想您在页面加载的某个地方调用了填充下拉列表的方法。。。您需要将其封装到IF中!回发块:
// somewhere in PageLoad()...
If(!IsPostBack)
{
PopulateDropdown();
}
使用上面的约定,下拉列表将仅在第一次加载页面时填充。我怀疑的是,当您从另一个下拉列表中进行选择时,AutoPostBack正在执行Page_Load方法,并再次填充下拉列表
使用上述约定将有助于避免这种情况。我将删除ddlCountry.DataBind;从ddlState\u中选择DexChanged事件。我不明白你为什么需要在那里做另一个数据绑定。解决了它!
好的,如果有人遇到类似的问题,并且找不到其他地方可以看的话,这就是我是如何解决这个愚蠢的问题的。
首先,我使用了一个存储过程,该存储过程将两个字段中的值连接起来。我将参数设置为整数4,我没有注意到有几个国家的代码超过4。因此,基本上,它返回一个NULL selectedvalue,而该值不会生成任何值,因为我的onselectedindexchanged方法基于selectedvalue,并且由于某种原因,没有处理NULL。
所以,是的,检查存储的进程和参数数据!:D
谢谢你的时间