2014-02-21 72 views
5

我有以下MVC操作:MVC可选参数默认值

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

isModal是一个可选的参数

是否有任何其他的方式来设置这个其他的默认比方法中使用bool isModal = true因为我的公司使用代码分析,并失败给出一个CA1026:不应该使用默认参数

但是,我不能覆盖该方法,因为你不能h AVE具有相同名称的两个动作,你会大致如下得到一个错误:

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) 

设置isModalUrlParameter.Optional

我无法测试以查看isModal是否为空,因为它将始终设置为false

+0

'public ActionResult OrderBrochure(int brochureId,bool?isModal)''?现在你可以测试它,看它是否为空。 –

+0

奇怪的是我之前试过它是一个可空的布尔,它刚刚崩溃,只是试了一遍,它现在的作品 – Pete

回答

2

显然,此规则已过时,不应将其应用于C#4.0和abo五个。类似的问题见this discussion

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

但是,抑制规则可能不符合您的公司规则,那么您必须解决该问题。 (这些规则是愚蠢的,当你不得不围绕一些过时的垃圾!)

其中一个选项是为每个像这样的情况有一个自定义规则:指定可选参数的默认值。 (对不起,找不到执行情况,迅速)

或者,正如已经建议去可空布尔

public ActionResult OrderBrochure(int brochureId, bool? isModal) 

,然后在空你的方法检查上isModel

+0

我认为这对MVC4毫无意义,我刚刚给我的老板发了一封电子邮件,要求他禁用它!谢谢 – Pete