【问题标题】:Mapping enum values to a drop down (combobox) list in ASP.NET将枚举值映射到 ASP.NET 中的下拉(组合框)列表
【发布时间】:2009-05-09 00:38:04
【问题描述】:

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

Public Enum myEnumType As Integer
  A
  B
  C
End Enum

我想用 ENUM 值之一定义每个 asp:ListItem 的“值”属性(当然,A、B、C 表示为字符串)。我还想将每个的“文本”值分配为一些不相关的字符串(例如“狗”、“猫”、“蚂蚁”)。

我想使用这个语法:

<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>

但在此类控件中使用

我怎样才能在声明性 ASP.NET 中做到这一点(而不是使用代码来创建每个项目)

【问题讨论】:

  • 我使用枚举,因此当值更改时,我可以对解析的枚举使用“select case”语句。如果值是字符串,我需要在代码中有一个匹配的字符串。我不喜欢这个值不是强类型

标签: asp.net


【解决方案1】:

代码没有多大意义。为什么在这种情况下使用 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>

【讨论】:

  • 我使用枚举,因此当值更改时,我可以对解析的枚举使用“select case”语句。如果值是字符串,我需要在代码中有一个匹配的字符串。我不喜欢这个值不是强类型
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    foreach(var item in Enum.GetValues(typeof(MyEnum)))
    {
        lbEnum.Items.Add(new ListItem(Enum.GetName(typeof(MyEnum), item), item.ToString()));
    }
    

    【讨论】:

    • 这样会生成ListItems(EnumName, EnumName),需要的公式是ListItems(EnumName, EnumValue)
    【解决方案4】:

    为什么不进行数据绑定?

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 2021-07-31
      • 2011-11-15
      • 1970-01-01
      • 2012-09-04
      • 2012-05-17
      相关资源
      最近更新 更多