首页 > 解决方案 > 处理下拉列表中的重复值

问题描述

在我的 VB.net3.5 应用程序中,我们显示了一个带有以下值的状态下拉列表

<asp:DropDownList NAME="mailingState" id="mailingState" runat="server">
    <option value="Ak">ALASKA</option>
    <option value="AA">APO AA</option>
    <option value="AE">APO AE</option>
    <option value="AP">APO AP</option>
    <option value="CA">CALIFORNIA</option>
    <option value="AA">DPO AA</option>
    <option value="AE">DPO AE</option>
    <option value="AP">DPO AP</option>
    <option value="FL">FLORIDA</option>
</asp:DropDownList>

如您所见,有一些重复的值,我必须处理。当我选择任何 DPO AA(或 AE,AP)并且出现服务器端错误和页面回发时,状态下拉列表始终显示 APO AA(或 AE,AP)而不是 DPO。我知道它首先选择重复值。我试图通过文本选择选项,它的显示 APO 而不是 DPO。有没有更好的方法来处理下拉列表中的重复项。当我检查时,在 chrome 浏览器检查元素中,它显示选择了正确的元素(DPO AA)。但是在 aspx.vb 页面中,当我检查 SelectItem 时,page_load 事件的第一行设置为 APO。任何想法如何解决这一问题。

标签: asp.netvb.net

解决方案


好吧,您仅限于 HTTP 协议功能。

GET请求返回<option selected="selected>任何这些项目。所以你可以在生成它时看到它

对您的应用程序的POST请求得到的只是 $Your$Hierarchy$is$mailingState=AA 并且无法区分 APO/DPO。无论用户选择了什么文本。所以 .NET 会为您选择第一个 mach。SelectedIndex 不通过 HTTP 传输。

解决方案 A使用一些唯一值。像“AA-APO AA”一样加入当前的键和值。或来自数据库的一些 ID。

解决方案 B您必须自己将所选索引发布给您。这意味着在 DDL 的 onchange 事件中添加一些 javascript 以将 selectedIndex 存储到该隐藏字段。然后工作并重新设置 DDL.SelectedIndex。


推荐阅读