0

これは私の列挙型です

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'.

誰か助けてくれませんか

4

2 に答える 2

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>())
于 2012-10-22T08:00:50.460 に答える
0

私はこの方法を使用します:

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");
于 2012-10-22T07:56:09.397 に答える