【问题标题】:Can I pass an enum into a controller so the Model Binder binds it?我可以将枚举传递给控制器​​以便模型绑定器绑定它吗?
【发布时间】:2011-03-26 07:24:08
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    更好的是你还可以传递Enum作为get参数

    @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 和枚举:

    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
    }
    

    我最喜欢的是,即使您将枚举参数和值作为小写形式传递,它也正确映射到大写属性和值,这让我大笑起来。

    【讨论】:

      【解决方案2】:

      是的,当有这样的控制器时:

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

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

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

      【讨论】:

        猜你喜欢
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 2013-05-30
        • 1970-01-01
        • 1970-01-01
        • 2011-03-22
        • 2012-10-05
        • 2016-11-14
        相关资源
        最近更新 更多