DropDown List重置为第一个项目,不返回selectedvalue

gdu*_*ubs 2 .net c# country state drop-down-menu

所以我有一个国家/地区下拉列表和一个状态下拉列表,它根据所选国家/地区动态填充.当我单击国家/地区时,状态下拉列表会很好地填充,但是当我从另一个下拉列表中单击值(状态)时出现问题,列表而不是保留所选项目将返回到列表的第一项而没有选择值显示.

<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");
}
Run Code Online (Sandbox Code Playgroud)

Dal*_*Dal 7

我假设您的Page_Load()中的某个地方正在调用填充下拉列表的方法...您需要将其封装到IF!PostBack块中:

// somewhere in PageLoad()...
If(!IsPostBack)
{
    PopulateDropdown();
}
Run Code Online (Sandbox Code Playgroud)

使用上面的约定,下拉列表将仅在第一次页面加载时填充.我怀疑发生的是当你从另一个下拉列表中做出选择时,AutoPostBack正在执行Page_Load()方法(应该如此)并再次重新填充下拉列表.

使用上述约定应该有助于避免这种情况.