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?

È stato utile?

Soluzione

Ci sono due casi:

  1. 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)
        {
    
        }
        ...
    }
    
  2. Stai utilizzando una digitazione debole con entrambi dynamic O FormCollection 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 manualmente TryUpdateModel 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top