下拉列表重置为第一项并且不返回选定值

发布于 2024-10-20 04:39:30 字数 1738 浏览 7 评论 0原文

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

<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");
}

So I have a country dropdownlist and a state dropdownlist which is being populated dynamically based off of the country chosen. When I click the country the state dropdown gets populated just fine but the problem arises when I click a value (state) from the other dropdown, the list instead of retaining the selected item will go back to the first item of the list and no selectedvalue are displayed.

<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");
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

小猫一只 2024-10-27 04:39:30

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

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

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

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

I presume that somewhere in your Page_Load() you are making a call to a method that populates the dropdown... you need to encapsulate this into an IF !PostBack block:

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

Using the convention above, the dropdown will only be populated on the first ever page load. What I suspect is happening is that when you make a selection from the other dropdown, the AutoPostBack is executing the Page_Load() method (as it should) and repopulating the dropdowns again.

Using the convention above should help avoid this.

影子的影子 2024-10-27 04:39:30

您的州/省/自治区/直辖市下拉菜单设置为自动回发 - 您填充国家/地区下拉列表的代码是否可能在回发时再次执行,从而使所选州/省/市/自治区无效,因为该国家/地区下拉列表已重新填充

Your state drop down is set to Autopostback - is it possible that your code to populate the country drop down is executing again on postback, thus rendering the selected state invalid because the country dropdown was repopulated

尝蛊 2024-10-27 04:39:30

我将从 ddlState_SelectedIndexChanged 事件中删除 ddlCountry.DataBind(); 。我不明白为什么你需要在那里进行另一个数据绑定。

I would remove the ddlCountry.DataBind(); from the ddlState_SelectedIndexChanged event. I don't see why you need to do another DataBind there.

べ繥欢鉨o。 2024-10-27 04:39:30

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

Solved it!
Ok, just so anyone who's stuck with a similar problem and can't find any other areas to look at here's how I fixed the stupid problem.
First of all, I was using a stored procedure and the stored procedure is concatenating the values from two fields. I set the parameters the Integer(4) which I didn't noticed there're a couple of countries with codes of more than 4. So basically, it's returning a NULL selectedvalue which in turn will not generate any value since my onselectedindexchanged method is based off of the selectedvalue and for some reason a NULL is not being processed.
So yeah, check your stored procs and parameter data! :D
Thanks for your time!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文