C# MVC4中枚举值的问题
大家好,我正在尝试使用枚举值创建一个下拉列表。我的html页面中有一个选择字段,如C# MVC4中枚举值的问题,c#,asp.net-mvc,asp.net-mvc-4,enums,C#,Asp.net Mvc,Asp.net Mvc 4,Enums,大家好,我正在尝试使用枚举值创建一个下拉列表。我的html页面中有一个选择字段,如 <select name="Mem_BloodGr" > <option value="A+">A+</option><option value="A-">A-</option> <option value="B+">B+</option><option value="B-">B-</optio
<select name="Mem_BloodGr" >
<option value="A+">A+</option><option value="A-">A-</option>
<option value="B+">B+</option><option value="B-">B-</option>
<option value="O+">O+</option><option value="O-">O-</option>
<option value="AB+">AB+</option><option value="AB-">AB-</option>
</select>
但我在添加枚举值时出错。任何人都可以帮助我。这是创建此类型下拉列表的正确方法还是MVC4中的其他简单方法?枚举值中不能有+和-,只能有字母和数字。用APlus或其他东西代替。您可以使用枚举作为下拉列表的源,但我建议使用具有名称的对象列表。这样,您可以更好地控制显示内容,并且可以使用名称中的任何字符。使用类似这样的方法在下拉列表中填充:
public class BloodGroup
{
public string Name {get; set; }
// other properties
}
然后,您可以创建可在视图中重用的血型组对象列表:
var BloodGroupList = new List<BloodGroup> { new BloodGroup { Name = "A+"}, new BloodGroup { Name = "A-"}, ... };
@Html.DropDownList("BloodGroups", BloodGroupList.Select(b => new SelectListItem { Name = b.Name, Value = b.Name }))
以下是我的枚举下拉列表方法: 打造我们自己的特色:
public class EnumDescription : Attribute
{
public string Text { get; private set; }
public EnumDescription(string text)
{
this.Text = text;
}
}
创建一个助手类:
public static class SelectListExt
{
public static SelectList ToSelectList(Type enumType)
{
return ToSelectList(enumType, String.Empty);
}
public static SelectList ToSelectList(Type enumType, string selectedItem)
{
List<SelectListItem> items = new List<SelectListItem>();
foreach (var item in Enum.GetValues(enumType))
{
FieldInfo fi = enumType.GetField(item.ToString());
var attribute = fi.GetCustomAttributes(typeof(EnumDescription), true).FirstOrDefault();
var title = attribute == null ? item.ToString() : ((EnumDescription)attribute).Text;
// uncomment to skip enums without attributes
//if (attribute == null)
// continue;
var listItem = new SelectListItem
{
Value = ((int)item).ToString(),
Text = title,
Selected = selectedItem == ((int)item).ToString()
};
items.Add(listItem);
}
return new SelectList(items, "Value", "Text", selectedItem);
}
}
你可以把你想要的任何东西都放在描述中
用法:
@Html.DropDownList(
"dst",
SelectListExt.ToSelectList(typeof(DaylightSavingTime)),
new {
id = "dst",
data_bind = "value: Dst"
})
注:数据绑定转换为“数据绑定”。使用Knockout.js很有用
可以省略最新的{}块枚举值中不能有+和-。用APlus或其他东西代替。我想对你会有用。@HåkanFahlstedt:或者我也不能用“空格”。正确的。。。。。但是我想要这样的输出。。这是在MVC4中创建重复使用下拉列表的替代方法吗
public enum DaylightSavingTime
{
[EnumDescription("Detect automatically")]
Auto = 0,
[EnumDescription("DST always on")]
AlwaysOn = 1,
[EnumDescription("DST always off")]
AlwaysOff = 2
}
@Html.DropDownList(
"dst",
SelectListExt.ToSelectList(typeof(DaylightSavingTime)),
new {
id = "dst",
data_bind = "value: Dst"
})