2014-02-21 159 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