Могу ли я передать перечисление в контроллер, чтобы связать его с 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, что делает мою усмешку обильно.
![введите описание изображения здесь]()