Domanda

Voglio creare un modelbinder personalizzato che convalida il modello limitato. Ho trovato diversi esempi di questo e funziona come dovrebbe. Ma voglio anche essere in grado di inviare la parte posteriore utente alla pagina è venuto da se c'è errori nel modello.

Questo è possibile fare e non ci sono effetti collaterali evidenti facendo questo?

Quello che voglio ottenere è che il controllore ottiene sempre i comandi validi, quindi non ho bisogno di controllare per model.IsValid () nel metodo di azione.

È stato utile?

Soluzione

Quello che cerchiamo di fare sembra buono, ma non funzionerà. Ci sono troppe restrizioni.

  1. Di solito, solo controller può decidere dove reindirizzare in caso di errore. È possibile utilizzare gli attributi aggiuntivi come [OnError ( "azione")], ma questo appare come soluzioni alternative.
  2. Modulo di non inviare tutti dei dati. Ad esempio, gli elenchi discesa, i valori ausiliari devono essere riempiti dal regolatore. Probabilmente si può utilizzare i filtri di azione per questo, ma questo è ancora una volta si presenta come un hack.

È possibile filtrare l'installazione azione globale (il controller di base) che sarà verificare la presenza di errori di modello (che imposta legante) e reindirizzamento (setup .Result). Ma questo è contorto e richiede troppo extra "codice" - attributi, ecc, che è poi difficile da monitorare e relazionarsi con la logica dell'applicazione reale. E diventa presto troppo restrittivi (vedi legge di astrazione che perde), quando non è necessario solo nome semplice azione sul reindirizzamento errore, ecc.

Questo aspetto molto più semplice se fatto in questo modo:

public ActionResult PostAction(ViewModel data)
{
   if (!ModelState.IsValid)
      return View("GetAction", data.WithDropDownList(repository.GetProducts()));

}

Nell'esempio precedente, il controllore ha il controllo del flusso di lavoro, proprio come dovrebbe essere. Essa ha anche la libertà di effettuare ulteriore verifica / setup. È comunque possibile utilizzare il più possibile le infrastrutture - leganti modello per fornire ModelState errori, ecc. - ma solo di controllo dovrebbe avere la decisione finale sull'ingresso e l'uscita

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