我有一个带有下拉(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中执行此操作(不使用后面的代码创建每个项目)
答案 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