2014-02-21 14 views
5

Ich habe folgende MVC Aktion:MVC Optional Parameter Standardwert

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

Wo isModal ein optionaler Parameter

Gibt es eine andere Möglichkeit, die Standardeinstellung für diese andere zu setzen, ist als bool isModal = true innerhalb der Methode unter Verwendung von Wie meine Firma verwendet Code-Analyse und dies schlägt fehl mit einer CA1026: Standard-Parameter sollten nicht verwendet werden

Allerdings kann ich nicht die Methode überschreiben, wie Sie nicht h ave zwei Aktionen mit dem gleichen Namen wie ein Fehler entlang der folgenden Zeilen erhalten werden:

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 

Und wenn ich

public ActionResult OrderBrochure(int brochureId, bool isModal) 

Einstellung isModal-UrlParameter.Optional

ich nicht testen können um zu sehen, ob isModal null ist, da es immer auf false gesetzt wird

+0

Was ist 'öffentliche ActionResult OrderBrochure (int brochureId, bool? IsModal)'? Jetzt können Sie es testen, um zu sehen, ob es "null" ist. –

+0

Seltsam Ich versuchte es als NULL Bool zuvor und es stürzte einfach, versuchte es noch einmal und es funktioniert jetzt – Pete

Antwort

2

Offenbar ist diese Regel veraltet und sollte nicht auf C# 4.0 und abo angewendet werden ve. Für ähnliche Fragen siehe this discussion.

Ich würde sagen, deaktivieren Sie diese Regel, da es in MVC4 keinen Sinn macht.

Die Unterdrückung der Regel entspricht jedoch möglicherweise nicht Ihren Unternehmensregeln, dann müssten Sie das umgehen. (Diese Regeln sind blöd, wenn man so einen veralteten Mist hacken muss!)

Eine der Optionen ist, eine benutzerdefinierte Regel für jeden Fall zu haben: Geben Sie den Standardwert für den optionalen Parameter ein. (Kann leider nicht Umsetzung finden, dass schnell)

Oder, wie es bereits mit nullable boolean

public ActionResult OrderBrochure(int brochureId, bool? isModal) 

und dann in Ihrer Methode Check für null auf isModel gehen vorgeschlagen.

+0

Ich dachte, es ergab keinen Sinn mit MVC4, ich habe gerade eine E-Mail an meinen Chef geschickt ihn zu deaktivieren! Vielen Dank – Pete

Verwandte Themen