2

所以我有一个国家下拉列表和一个州下拉列表,它们根据所选国家动态填充。当我单击国家/地区时,状态下拉列表会很好地填充,但是当我从另一个下拉列表中单击一个值(状态)时会出现问题,列表而不是保留所选项目将返回到列表的第一项并且没有 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");
}
4

4 回答 4

7

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

// somewhere in PageLoad()...
If(!IsPostBack)
{
    PopulateDropdown();
}

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

使用上面的约定应该有助于避免这种情况。

于 2011-03-01T19:17:47.927 回答
0

您的状态下拉列表设置为自动回发 - 您的填充国家下拉列表的代码是否可能在回发时再次执行,从而导致所选状态无效,因为重新填充了国家下拉列表

于 2011-03-01T16:37:17.653 回答
0

我会删除 ddlCountry.DataBind(); 来自ddlState_SelectedIndexChanged事件。我不明白为什么你需要在那里做另一个 DataBind 。

于 2011-03-01T19:36:11.170 回答
0

解决了!好的,所以任何遇到类似问题并且找不到任何其他领域的人都是我解决这个愚蠢问题的方法。首先,我使用的是存储过程,存储过程连接两个字段的值。我将参数设置为 Integer(4),我没有注意到有几个国家的代码超过 4。所以基本上,它返回一个 NULL selectedvalue 反过来不会生成任何值,因为我的 onselectedindexchanged 方法是基于 selectedvalue 并且由于某种原因未处理 NULL。所以,是的,检查您存储的过程和参数数据!:D 感谢您的宝贵时间!

于 2011-03-03T19:46:13.647 回答