2012-11-23 18 views
6

gefüllt Ich habe eine Methode in einem Controller:Optional Parameter immer

public ActionResult SendNotification(Guid? id=null, SendNotification notification =null) 

Es reagiert auf /Apps/SendNotification/{guid}?{SendNotification properties}

SendNotification ist ein Modell mit mehreren String-Eigenschaften.

Mein Problem ist, dass SendNotification NIE null ist. Egal, wie ich die Aktion nenne. .NET scheint immer ein Objekt von SendNotification zu instanziieren (mit allen Feldern null).

Ich habe sogar mit der System.Web.Http.FromUri und System.Web.Http.FromBody getestet und es tut das immer noch.

Irgendwelche Ideen?

Hinweis: Dies ist nicht WebApi. Dies ist eine normale MVC.

Mein Projekt haben nur die Standardroute:

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
+0

was ist Ihre Route? –

+0

Hinzugefügt oben. Hinweis: In meinem ursprünglichen Beitrag gab es einen Fehler in der URL meiner Anfrage (ich habe es behoben). – rufo

Antwort

2

Das Modell Sie trickst ist verbindlich.

Da kein Parameter zum Binden an das Modell gefunden wird, sind alle Eigenschaften null, das Modell wird jedoch weiterhin standardmäßig instanziiert.

Anstatt zu prüfen, ob das Modell null ist, prüfen Sie, ob eine Ihrer Haupteigenschaften (z. B. ID) null ist.

+1

ok ... dieser Workaround würde funktionieren, aber es scheint mir ein Fehler zu sein. Warum müsste C# das Modell instanziieren, wenn keine Daten dazu führen? – rufo

+0

Ich sehe es nicht als Fehler. Der Modellbinder muss das Modell instanziieren, um zu wissen, nach welchem ​​Parameter gesucht werden soll. Dann bindet es die Werte an die übereinstimmenden Eigenschaften, wenn keine gefunden werden, dann ist nichts gebunden. –

+0

Ok. Ich habe es als Antwort akzeptiert (obwohl ich die Logik, die C# verwendet, nicht wirklich mag). Vielen Dank. – rufo

Verwandte Themen