modello dinamico e ModelState
-
12-11-2019 - |
Domanda
Ho un'azione come questa:
Update([Bind(Prefix = "CurrentModel")] dynamic edited)
ma quando uso la dinamica il ModelState.IsValid
restituisce sempre vero, quindi sembra che non ci sia convalida sull'oggetto dinamico?In caso contrario, come posso risolverlo?
Soluzione
Ci sono due casi:
Stai utilizzando modelli di visualizzazione come argomenti di azione, nel qual caso il raccoglitore di modelli predefinito assegna automaticamente le proprietà e imposta possibili errori allo stato del modello:
public ActionResult Update([Bind(Prefix = "CurrentModel")] EditViewModel edited) { if (ModelState.IsValid) { } ... }
Stai utilizzando una digitazione debole con entrambi
dynamic
OFormCollection
nel qual caso il raccoglitore del modello predefinito non si avvia e non esegue alcuna convalida poiché non è in grado di dedurre il tipo di modello reale.In questo caso è necessario chiamare manualmenteTryUpdateModel
e indica il tipo di modello:public ActionResult Update(dynamic edited) { var model = new MyViewModel(); if (!TryUpdateModel(model, "CurrentModel")) { // The model was not valid } ... }
Conclusione:utilizzando dynamic
poiché l'argomento dell'azione in un'azione del controller ha pochissimo senso.