Могу ли я передать enum в контроллер, чтобы связыватель модели связал его? - PullRequest
11 голосов
/ 06 августа 2010

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

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

Ответы [ 2 ]

15 голосов
/ 06 августа 2010

Да, при наличии контроллера вроде:

enum MyAction { Lalala }

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

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

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

3 голосов
/ 10 ноября 2015

Становится еще лучше, вы также можете передать 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 и 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
}

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

enter image description here

...