Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 下拉列表重置为第一项,不返回selectedvalue_C#_.net_Drop Down Menu_State_Country - Fatal编程技术网

C# 下拉列表重置为第一项,不返回selectedvalue

C# 下拉列表重置为第一项,不返回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"

所以我有一个国家下拉列表和一个州下拉列表,根据所选国家动态填充。当我单击国家/地区时,状态下拉列表填充得很好,但是当我单击另一个下拉列表中的值状态时,问题出现了,列表将返回到列表的第一个项目,而不是保留选定的项目,并且不显示selectedvalue

<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 谢谢你的时间