获取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的扩展方法,它将为您生成下拉列表并将响应绑定回模型中的枚举属性。