我有以下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
答案 0 :(得分:2)
显然此规则已过时,不应将其应用于C#4.0及更高版本。有关类似问题,请参阅this discussion。
我会说禁用此规则,因为它在MVC4中没有任何意义。
但是,取消规则可能不符合您的公司规则,那么您必须解决这个问题。 (这些规则很愚蠢,当你不得不破解那些过时的垃圾时!)
其中一个选项是为每种情况设置一个自定义规则:指定可选参数的默认值。 (抱歉,无法快速找到实施方案)
或者,正如已经建议的那样使用nullable boolean
public ActionResult OrderBrochure(int brochureId, bool? isModal)
然后在您的方法中检查isModel
上的null。