获取Enum值以显示在Dropdownlist Asp.Net MVC上
我有这样的枚举:
public enum PaymentType { Self=1, Insurer=2, PrivateCompany=3 }
我在控制器中将它显示为像这样的选择框选项:
List paymentTypeList = Enum.GetValues(typeof (Patient.PaymentType)).Cast().ToList(); ViewBag.PaymentType = new SelectList(paymentTypeList);
在这里我可以看到只有枚举的字符串部分(例如“Self”)才会到达前端,所以我不会在我的下拉列表中获得枚举的值(例如“1”)。 如何将文本以及枚举值传递给选择列表?
您可以编写这样的扩展方法:
public static System.Web.Mvc.SelectList ToSelectList(this TEnum obj) where TEnum : struct, IComparable, IFormattable, IConvertible // correct one { return new SelectList(Enum.GetValues(typeof(TEnum)).OfType() .Select(x => new SelectListItem { Text = Enum.GetName(typeof(TEnum), x), Value = (Convert.ToInt32(x)).ToString() }), "Value", "Text"); }
并在行动中使用它像这样:
public ActionResult Test() { ViewBag.EnumList = PaymentType.Self.ToSelectList(); return View(); }
在视图中:
@Html.DropDownListFor(m=>m.SomeProperty,ViewBag.EnumList as SelectList)
呈现的HTML:
这是一个使用DropDownListFor绑定Enum的Demo Fiddle
public enum PaymentType { Self=1, Insurer=2, PrivateCompany=3 }
获得自我价值:
int enumNumber = (int)PaymentType.Self; //enumNumber = 1
例:
getEnum(PaymentType.Self); private void getEnum(PaymentType t) { string enumName = t.ToString(); int enumNumber = (int)t; MessageBox.Show(enumName + ": " + enumNumber.ToString()); }
MVC5中有一个名为SelectExtensions.EnumDropDownListFor的扩展方法,它将为您生成下拉列表并将响应绑定回模型中的枚举属性。