Posso passare un enum in un controller in modo che il modello Binder lo lega?
-
26-09-2019 - |
Domanda
in caso affermativo, come devo passare il parametro? sarebbe una stringa corrispondente al nome enum essere ok? Questo sarebbe utile se stavo passando una casella a discesa che ha trovato gli elementi enumerati.
Sarebbe utile utilizzare una soluzione presentata in questa risposta se potessi altrettanto facilmente legarsi al enum quando presento la parte posteriore dei dati.
Soluzione
Sì, quando si ha un controller come:
enum MyAction { Lalala }
public ActionResult Index(MyAction action) { ... }
Si può solo fare Index/Lalala
, e tutto funziona bene.
Se avete bisogno di più complesso vincolante (come la mappatura di un certo valore stringa in un complesso di classe), uso qualcosa come StructureMap .
Altri suggerimenti
E 'ancora meglio si può anche passare Enum
come get parametro
@Html.ActionLink("Email Quote", "UnitDetails", "Journey", new { product = product.ProductTitle, button = "email" }, new { @class = "btn btn--main btn--main-orange" })
che finisce seguente url: http://localhost:50766/UnitDetails?product=Your%20quote&button=email
Il metodo d'azione che accetta assomiglia a questo:
[SessionTimeout]
public ActionResult UnitDetails(QuoteViewModel viewModel)
QuoteViewModel e 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
}
Quello che mi piace di più è anche se si passa enum parametro e il valore come minuscole si associa correttamente alla proprietà maiuscole e valore, il che rende il mio ghigno copiosamente.