我可以使用SelectedIndex而不是SelectedValue保存DropDownList的状态吗?

时间:2016-04-03 18:49:34

标签: asp.net webforms

我有一个场景,我的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

1 个答案:

答案 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"];