【问题标题】:Get Enums for dropdownlist in asp.net mvc3在 asp.net mvc3 中获取下拉列表的枚举
【发布时间】:2012-10-22 07:40:27
【问题描述】:

这是我的枚举

public class Woodshape
    {
        public enum eWoodShape
        {
            Round = 10, 
            Oval = 20, 
            Plain = 30
        }
    }

现在我想将它作为下拉列表添加到我的控制器中

public ActionResult Create()
        {
            List<string> li = new List<string>();
            FieldInfo[] myEnumFields = typeof(Woodshape.eWoodShape).GetFields();
            foreach (FieldInfo myField in myEnumFields)
            {
                if (!myField.IsSpecialName && myField.Name.ToLower() != "notset")
                {
                    int myValue = (int)myField.GetValue(0);
                    li.Add(myField.Name);
                }
            }
            ViewBag.ddlEnumshape = new SelectList(myEnumFields, "myValue", "Name");

            return View();
        } 

在我看来,将其绑定为..

<div>
@Html.DropDownList("ddlEnumshape", "-Select shape-")
/<div>

但是,它显示错误

System.Reflection.RtFieldInfo' does not contain a property with the name 'myValue'.

谁能帮帮我

【问题讨论】:

    标签: c# asp.net-mvc-3 enums


    【解决方案1】:
    public static IEnumerable<SelectListItem> GetListEnumWrap<TEnum>()
            {
                var items = new List<SelectListItem>();
                if (typeof(TEnum).IsEnum)
                {
                    foreach (var value in Enum.GetValues(typeof(TEnum)).Cast<int>())
                    {
                        var name = Enum.GetName(typeof(TEnum), value);
                        name = string.Format("{0}", name);
                        items.Add(new SelectListItem() { Value = value.ToString(), Text = name });
                    }
                }
                return items;
            }
    

    使用:

    @Html.DropDownListFor(m => m.Type, EnumExtensions.GetListEnumWrap<Types>())
    

    【讨论】:

    • @ser1469330,注意响应来了
    【解决方案2】:

    我用这个方法:

    public static Dictionary<int, string> EnumToDictionary<T>()
        {
            return Enum.GetValues(typeof (T)).Cast<T>().ToDictionary(x => Convert.ToInt32(x), x => x.ToString());
        }
    
    ViewBag.ddlEnumshape = new SelectList(EnumToDictionary<Woodshape.eWoodShape>, "Key", "Value");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多