MVC4中枚举值的问题

时间:2014-01-28 06:59:41

标签: 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-</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中创建此类型下拉列表或任何其他简单方法的正确方法???

2 个答案:

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

是有用的

您可以省略最新的新{}块