Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC4中枚举值的问题_C#_Asp.net Mvc_Asp.net Mvc 4_Enums - Fatal编程技术网

C# MVC4中枚举值的问题

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

大家好,我正在尝试使用枚举值创建一个下拉列表。我的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>

但我在添加枚举值时出错。任何人都可以帮助我。这是创建此类型下拉列表的正确方法还是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"
    })