2012-11-23 50 views
6

Ho un metodo in un controllore:opzionale Parametro sempre pieno

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

Risponde a /Apps/SendNotification/{guid}?{SendNotification properties}

sendNotification è un modello con più proprietà di stringa.

Il mio problema è che SendNotification è MAI null. Non importa come chiamo l'azione .NET sembra istanziare sempre un oggetto di SendNotification (con tutti i campi null).

Ho anche provato con il System.Web.Http.FromUri e System.Web.Http.FromBody e lo fa ancora.

Qualche idea?

Nota: questo non è WebApi. Questo è normale MVC.

Il mio progetto hanno solo il percorso di default:

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

qual è il tuo percorso? –

+0

Aggiunto sopra. Nota: nel mio post originale c'era un errore nell'URL della mia richiesta (l'ho risolto). – rufo

risposta

2

Questo è il modello di rilegatura ingannando.

Poiché non trova alcun Parametro da associare al Modello, tutte le proprietà sono nulle ma il modello è ancora istanziato per impostazione predefinita.

Invece di verificare che il modello sia nullo, verificare che una delle proprietà principali (come ID) sia nullo.

+1

ok ... questa soluzione funzionerebbe, tuttavia, mi sembra un bug. Perché C# deve istanziare il modello se non ci sono dati che portano a questo. – rufo

+0

Non lo vedo come un bug. Il legatore modello deve istanziare il modello per sapere quale parametro cercare. Quindi, lega i valori alle proprietà corrispondenti, se non ne viene trovato nessuno, quindi non viene associato nulla. –

+0

Ok. L'ho accettato come risposta (anche se non mi piace la logica che C# sta usando). Grazie. – rufo