Posso passar uma enumeração para um controlador para que o fichário o vincule?
-
26-09-2019 - |
Pergunta
Se sim, como devo passar no parâmetro? Uma string correspondia ao nome da enum seria OK? Isso seria útil se eu estivesse passando por uma caixa suspensa que correspondesse aos itens enumerados.
Seria útil usar uma solução apresentada em esta resposta Se eu pudesse vincular com facilidade a enumeração quando enviar os dados de volta.
Solução
Sim, ao ter um controlador como:
enum MyAction { Lalala }
public ActionResult Index(MyAction action) { ... }
Você pode simplesmente fazer Index/Lalala
, e tudo funciona bem.
Se você precisar de uma ligação mais complexa (como mapear um determinado valor da string para uma classe complexa), use algo como StructureMap.
Outras dicas
Fica ainda melhor que você também pode passar Enum
como obtenha o parâmetro
@Html.ActionLink("Email Quote", "UnitDetails", "Journey", new { product = product.ProductTitle, button = "email" }, new { @class = "btn btn--main btn--main-orange" })
Isso acaba seguindo o URL: http://localhost:50766/UnitDetails?product=Your%20quote&button=email
Método de ação que aceita se parece com o seguinte:
[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
}
O que eu mais amo é que, mesmo se você passar o parâmetro e o valor da enum como minúsculas, ele mapeia corretamente a propriedade e o valor em alta, o que torna meu sorriso profusamente.