MVC可选参数默认值

时间:2014-02-21 11:45:29

标签: asp.net-mvc asp.net-mvc-4 optional-parameters

我有以下MVC操作:

[ActionName("order-brochure")]
public ActionResult OrderBrochure(int brochureId, bool isModal = true)
{
    return View(HomeModelBuilder.BuildOrderBrochureModel(brochureId, isModal, false));
}

isModal是可选参数

除了在方法中使用bool isModal = true之外还有其他方法来设置此默认值,因为我的公司使用代码分析,而且无法提供 CA1026:不应使用默认参数

但是,我无法覆盖该方法,因为您不能使用同名的两个操作,因为您将在以下行中收到错误:

The current request for action 'order-brochure' on controller type 'HomeController' is ambiguous between the following action methods: 
System.Web.Mvc.ActionResult OrderBrochureModal(Int32, Boolean) on type MarshallsCoUkCommercial.Website.Controllers.HomeController
System.Web.Mvc.ActionResult OrderBrochure(Int32) on type MarshallsCoUkCommercial.Website.Controllers.HomeController

如果我使用

public ActionResult OrderBrochure(int brochureId, bool isModal)

isModal设为UrlParameter.Optional

我无法测试isModal是否为null,因为它始终设置为false

1 个答案:

答案 0 :(得分:2)

显然此规则已过时,不应将其应用于C#4.0及更高版本。有关类似问题,请参阅this discussion

我会说禁用此规则,因为它在MVC4中没有任何意义。

但是,取消规则可能不符合您的公司规则,那么您必须解决这个问题。 (这些规则很愚蠢,当你不得不破解那些过时的垃圾时!)

其中一个选项是为每种情况设置一个自定义规则:指定可选参数的默认值。 (抱歉,无法快速找到实施方案)

或者,正如已经建议的那样使用nullable boolean

public ActionResult OrderBrochure(int brochureId, bool? isModal)

然后在您的方法中检查isModel上的null。