我可以将枚举传递给控制器​​,以便Model Binder绑定它吗?

时间:2010-08-06 11:55:49

标签: c# asp.net-mvc enums model-binding

如果是这样,我应该如何传递参数?匹配枚举名称的字符串可以吗?如果我传递的是与枚举项匹配的下拉框,这将非常方便。

如果我能够在提交数据时轻松绑定到枚举,那么使用this answer中提供的解决方案会很有用。

2 个答案:

答案 0 :(得分:15)

是的,当有一个控制器时:

enum MyAction { Lalala }

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

你可以做Index/Lalala,一切正常。

如果您需要更复杂的绑定(例如将某个字符串值映射到复杂类),请使用类似StructureMap的内容。

答案 1 :(得分:3)

您可以将Enum作为获取参数

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

最终会跟随网址: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参数和值传递为小写,它也正确地映射到大写属性和值,这使我的笑容很多。

enter image description here