我有一个场景,我的DropDownList由最终用户动态填充。但是,有时,两个或更多项可以具有相同的值。例如:
<asp:DropDownList runat="server" ID="ddl" AutoPostBack="true">
<asp:ListItem Text="Item 1" Value="Item 1" />
<asp:ListItem Text="Item 2" Value="Item 2" />
<asp:ListItem Text="Item 3" Value="Item 2" />
</asp:DropDownList>
当我选择第三项时,ASP.NET会在页面刷新期间选择第二项,因为两者具有相同的值。因此,它不使用所选索引,而是使用所选值。有没有办法在我的应用程序上更改此行为?
我动态地添加了所有控件,所以如果我可以为我添加到网页的每个控件自动执行此操作,那就太好了。有什么建议吗?
更新1:
向github添加了一个示例项目:https://github.com/vmrocha/dropdown-issue
答案 0 :(得分:2)
您可以为每个Item添加自定义属性,将实际值存储在其中并在代码隐藏中检索它。然后可以将Value
属性设置为所有项目的不同值(例如索引):
<asp:DropDownList runat="server" ID="ddl" AutoPostBack="true">
<asp:ListItem Text="Item 1" Value="1" Tag="Value1" />
<asp:ListItem Text="Item 2" Value="2" Tag="Value2" />
<asp:ListItem Text="Item 3" Value="3" Tag="Value2"/>
</asp:DropDownList>
在代码隐藏中:
string actualSelectedValue = ddl.SelectedItem.Attributes["Tag"];