将枚举值映射到ASP.NET中的下拉(组合框)列表

时间:2009-05-09 00:38:04

标签: asp.net

我有一个带有下拉(asp:DropDownList)控件的ASP.NET页面。我也有一个定义的ENUM

Public Enum myEnumType As Integer
  A
  B
  C
End Enum

我想用每个asp:ListItem定义一个ENUM值(A,B,C表示为字符串)的“value”属性。我还想将每个的“text”值指定为一些不相关的字符串(例如“dog”,“cat”,“ant”)。

我想使用这种语法:

<asp:DropDownList ID="myCombo" runat="server">
  <asp:ListItem Text="cat" Value="<%= myEnumType.A.toString() %>" />
  <asp:ListItem Text="dog" Value="<%= myEnumType.B.toString() %>" />
  <asp:ListItem Text="ant" Value="<%= myEnumType.C.toString() %>" />
</asp:DropDownList>

但是使用&lt;%=在此类控件中无效。

如何在声明性ASP.NET中执行此操作(不使用后面的代码创建每个项目)

4 个答案:

答案 0 :(得分:2)

代码没有多大意义。为什么在这种情况下使用Enum?它与使用常量相同。看起来你可以逃脱硬编码值。

<asp:DropDownList ID="myCombo" runat="server">
  <asp:ListItem Text="cat" Value="A" />
  <asp:ListItem Text="dog" Value="B" />
  <asp:ListItem Text="ant" Value="C" />
</asp:DropDownList>

答案 1 :(得分:1)

MathewMartin的回答似乎效率很低。这不是一个更好/更清洁的方法吗?

string[] names = Enum.GetNames(typeof(MyFavoriteEnum));
int[] values = (int[])Enum.GetValues(typeof(MyFavoriteEnum));
for(int i =0; i<names.Length;i++){
   dropDown.Items.Add(
      new ListItem(
        names[i],
        values[i].ToString()
       )
   );
}

答案 2 :(得分:1)

foreach(var item in Enum.GetValues(typeof(MyEnum)))
{
    lbEnum.Items.Add(new ListItem(Enum.GetName(typeof(MyEnum), item), item.ToString()));
}

答案 3 :(得分:0)

为什么不用数据绑定?

enum MyFavoriteEnum { A=1, B=2, C=3 }
for(int i =0; i<Enum.GetNames(typeof(MyFavoriteEnum)).Length;i++)
{
   ListItem li = new ListItem(
       Enum.GetNames(typeof(MyFavoriteEnum))[i],
       ((int)Enum.GetValues(typeof(MyFavoriteEnum)).GetValue(i)).ToString()
       );
    dropDown.Items.Add(li);
} 
// Edited to make it actually work