大家好我尝试使用枚举值制作一个下拉列表。我在我的html页面中有一个选择字段,如
<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>
在我的网页的许多地方重复这一点。所以我尝试使用枚举值生成下拉列表
namespace .....Models
{
public class MemberData
{
public int Id { get; set; }
public string Mem_NA { get; set; }
........
public BloodGroup Mem_BloodGr { get; set; }
}
public enum BloodGroup
{
A+, //// **error shows here like, "} expected"**
A-,
B-,
B+
}
}
但添加枚举值时出错了。任何人都可以帮助我。这是在MVC4中创建此类型下拉列表或任何其他简单方法的正确方法???
答案 0 :(得分:1)
你不能在枚举值中只有+和 - ,只有字母和数字。使用APlus或其他东西。您可以使用枚举作为下拉列表的源,但我建议使用具有名称的对象列表。这样,您可以更好地控制显示的内容,并且可以使用名称中的任何字符。使用类似的东西来填充下拉列表:
public class BloodGroup
{
public string Name {get; set; }
// other properties
}
然后,您可以创建可在视图中重复使用的BloodGroup对象列表:
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 }))
答案 1 :(得分:1)
以下是我对枚举下拉列表的方法:
制作我们自己的属性:
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);
}
}
Enum本身:
public enum DaylightSavingTime
{
[EnumDescription("Detect automatically")]
Auto = 0,
[EnumDescription("DST always on")]
AlwaysOn = 1,
[EnumDescription("DST always off")]
AlwaysOff = 2
}
您可以将所需内容放入EnumDescription
用法:
@Html.DropDownList(
"dst",
SelectListExt.ToSelectList(typeof(DaylightSavingTime)),
new {
id = "dst",
data_bind = "value: Dst"
})
注意:data_bind转换为&#34; data-bind&#34;。使用Knockout.js
是有用的您可以省略最新的新{}块