2012-11-23 13 views
6

mam metodę w kontrolerze:opcjonalny parametr zawsze wypełniona

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

reaguje na /Apps/SendNotification/{guid}?{SendNotification properties}

sendNotification to model z wieloma właściwościami smyczkowych.

Mój problem polega na tym, że SendNotification jest NIGDY pusty. Nie ważne jak wywołać akcję .NET wydaje się zawsze tworzyć obiekt SendNotification (ze wszystkimi polami null).

Testowałem nawet z System.Web.Http.FromUri i System.Web.Http.FromBody i nadal to robi.

Wszelkie pomysły?

Uwaga: to nie jest WebApi. To jest zwykła MVC.

Mój projekt ma tylko domyślną trasę:

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

jaka jest Twoja trasa? –

+0

Dodano powyżej. Uwaga: w moim oryginalnym wpisie wystąpił błąd w Url mojej prośby (naprawiłem). – rufo

Odpowiedz

2

czyli modelu wiązania oszukiwanie się.

Ponieważ nie znaleziono żadnego parametru do powiązania z modelem, wszystkie właściwości są puste, ale model nadal jest domyślnie tworzony.

Zamiast sprawdzać, czy Model jest pusty, należy sprawdzić, czy jedna z właściwości głównych (np. ID) ma wartość NULL.

+1

ok ... to obejście zadziała, jednak wydaje mi się, że to błąd. Dlaczego C# musiałoby utworzyć instancję modelu, jeśli nie ma danych, które do tego prowadzą. – rufo

+0

Nie widzę tego jako błędu. Segregator modelu musi utworzyć instancję modelu, aby wiedzieć, którego parametru szukać. Następnie wiąże wartości z dopasowanymi właściwościami, jeśli żadne nie zostaną znalezione, wówczas nic nie jest związane. –

+0

Ok. Zaakceptowałem to jako odpowiedź (nawet jeśli nie podoba mi się logika, której używa C#). Dzięki. – rufo

Powiązane problemy