【发布时间】:2011-03-26 07:24:08
【问题描述】:
如果是这样,我应该如何传递参数?匹配枚举名称的字符串可以吗?如果我传递一个与枚举项匹配的下拉框,这将很方便。
如果我可以在提交数据时轻松绑定到枚举,那么使用this answer 中提供的解决方案会很有用。
【问题讨论】:
标签: c# asp.net-mvc enums model-binding
如果是这样,我应该如何传递参数?匹配枚举名称的字符串可以吗?如果我传递一个与枚举项匹配的下拉框,这将很方便。
如果我可以在提交数据时轻松绑定到枚举,那么使用this answer 中提供的解决方案会很有用。
【问题讨论】:
标签: c# asp.net-mvc enums model-binding
更好的是你还可以传递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
}
我最喜欢的是,即使您将枚举参数和值作为小写形式传递,它也正确映射到大写属性和值,这让我大笑起来。
【讨论】:
是的,当有这样的控制器时:
enum MyAction { Lalala }
public ActionResult Index(MyAction action) { ... }
你可以做Index/Lalala,一切正常。
如果您需要更复杂的绑定(例如将某个字符串值映射到复杂的类),请使用 StructureMap 之类的东西。
【讨论】: