Могу ли я передать перечисление в контроллер, чтобы связать его с Binder Model?

если да, то как мне передать параметр? была бы строка, соответствующая имени перечисления, в порядке? Это было бы удобно, если бы я передавал раскрывающийся список, который соответствовал перечисляемым элементам.

Было бы полезно использовать решение, представленное в этом ответе, если бы я мог так же легко привязываться к перечислению при отправке данных назад.

Ответ 1

Да, когда у контроллера есть:

enum MyAction { Lalala }

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

Вы можете просто сделать Index/Lalala, и все будет хорошо.

Если вам требуется более сложная привязка (например, сопоставление определенного строкового значения с сложным классом), используйте что-то вроде StructureMap.

Ответ 2

Получается еще лучше, вы также можете передать Enum как параметр get

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

который заканчивается следующим URL: http://localhost:50766/UnitDetails?product=Your%20quote&button=email

Метод принятия, который принимает, выглядит следующим образом:

    [SessionTimeout]
    public ActionResult UnitDetails(QuoteViewModel viewModel)

QuoteViewModel и перечисление:

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
}

То, что я люблю больше всего, даже если вы передаете параметр и значение enum как строчные, он правильно отображает свойство Uppercase и Value, что делает мою усмешку обильно.

введите описание изображения здесь