0

I have an enum like this:

public enum PaymentType
{
    Self=1,
    Insurer=2,
    PrivateCompany=3
}

And I am showing it as select box options like this inside Controller:

List<Patient.PaymentType> paymentTypeList =
    Enum.GetValues(typeof (Patient.PaymentType)).Cast<Patient.PaymentType>().ToList();
    ViewBag.PaymentType = new SelectList(paymentTypeList);

Here I can see that only the string part (example "Self") of the enum is going to the front end, so I won't get the value (example "1") of enum in my dropdown. How can I pass text as well as value of enum to select list?

pixelmeow
  • 654
  • 1
  • 9
  • 31
None
  • 5,582
  • 21
  • 85
  • 170
  • You don't necessarily need to since the `DefaultModelBinder` will bind to the string value when you post back, but [these answers](http://stackoverflow.com/questions/388483/how-do-you-create-a-dropdownlist-from-an-enum-in-asp-net-mvc) show some methods to do it. –  Mar 02 '15 at 10:31
  • Just cast it to the `int` it will give you the `int` value. – Mahesh Mar 02 '15 at 10:31
  • Did you try searching? http://stackoverflow.com/questions/388483/how-do-you-create-a-dropdownlist-from-an-enum-in-asp-net-mvc and so on. – CodeCaster Mar 02 '15 at 10:32

3 Answers3

5

You can write an extension method like this:

 public static System.Web.Mvc.SelectList ToSelectList<TEnum>(this TEnum obj)
            where TEnum : struct, IComparable, IFormattable, IConvertible // correct one
 {

   return new SelectList(Enum.GetValues(typeof(TEnum)).OfType<Enum>()
              .Select(x =>
                    new SelectListItem
                    {
                        Text = Enum.GetName(typeof(TEnum), x),
                        Value = (Convert.ToInt32(x)).ToString()
                    }), "Value", "Text");

}

and in action use it like this:

public ActionResult Test()
{
     ViewBag.EnumList = PaymentType.Self.ToSelectList();

     return View();
}

and in View :

@Html.DropDownListFor(m=>m.SomeProperty,ViewBag.EnumList as SelectList)

Rendered HTML:

<select id="EnumDropDown" name="EnumDropDown">
<option value="1">Self</option>
<option value="2">Insurer</option>
<option value="3">PrivateCompany</option>
</select>

Here is a working Demo Fiddle of Enum binding with DropDownListFor

Ehsan Sajjad
  • 61,834
  • 16
  • 105
  • 160
1
public enum PaymentType
{
        Self=1,
        Insurer=2,
        PrivateCompany=3
}

Get Self value:

int enumNumber = (int)PaymentType.Self; //enumNumber = 1

Exemple:

getEnum(PaymentType.Self);

private void getEnum(PaymentType t)
{
            string enumName = t.ToString();
            int enumNumber = (int)t;
            MessageBox.Show(enumName + ": " + enumNumber.ToString());
}
Vynhoû Tawa
  • 68
  • 1
  • 14
0

There is an extension method in MVC5 called SelectExtensions.EnumDropDownListFor which will generate the drop down list for you and bind the response back to an enum property in your model.

heymega
  • 9,215
  • 8
  • 42
  • 61