11

if so, how should i pass the parameter? would a string matching the enum name be ok? This would be handy if I was passing a dropdown box that matched enumerated items.

It would be useful to use a solution presented in this answer if I could just as easily bind to the enum when I submit the data back.

Community
  • 1
  • 1
DaveDev
  • 41,155
  • 72
  • 223
  • 385

2 Answers2

15

Yes, when having a controller like:

enum MyAction { Lalala }

public ActionResult Index(MyAction action) { ... }

You can just do Index/Lalala, and everything works fine.

If you need more complex binding (like mapping a certain string value to a complex class), use something like StructureMap.

Jan Jongboom
  • 26,598
  • 9
  • 83
  • 120
3

It gets even better you can also pass Enum as get parameter

@Html.ActionLink("Email Quote", "UnitDetails", "Journey", new { product = product.ProductTitle, button = "email" }, new { @class = "btn btn--main btn--main-orange" })

that ends up following url: http://localhost:50766/UnitDetails?product=Your%20quote&button=email

Action method that accepts looks like this:

    [SessionTimeout]
    public ActionResult UnitDetails(QuoteViewModel viewModel)

QuoteViewModel and enum:

public class QuoteViewModel : IQuoteViewModel
{
    public QuoteViewModelProducts Products { get; set; }

    public bool HasDiscount { get; set; }

    public string Product { get; set; }

    public DetailButtonType Button { get; set; }
}

public enum DetailButtonType
{
    Buy,
    Callback,
    Email
}

What I love most is even if you pass enum parameter and value as lowercase it maps correctly to Uppercase property and Value, which makes my grin profusely.

enter image description here

Matas Vaitkevicius
  • 58,075
  • 31
  • 238
  • 265