Domanda

Sto usando AjaxSubmit per pubblicare un modulo e ci sono convalide lato server fatte usando ValX (modo RuleException). Non sto usando il modo try / catch per aggiungere errori al modello e poi inviare per visualizzare. Invece - voglio usare l'attibute HandleError e nel OnException sto aggiungendo gli errori di modello. Il problema principale è come ottengo questi errori come risultato della chiamata Ajax?

È stato utile?

Soluzione

Non c'è una grande soluzione integrata in questo momento. In questo modo corretto richiede un quadro di convalida lato client (perché, per visualizzare gli errori, è necessario modificare dinamicamente la pagina HTML), e fino a poco tempo, ASP.NET MVC non ha avuto che. Tuttavia, ASP.NET MVC 2 Preview 2 ha introdotto la validazione lato client, quindi è ragionevole presumere che qualcosa potrebbe essere integrato nel quadro più presto.

Nel frattempo, però, HandleErrorAttribute non sarà aiuterà. HandleErrorAttribute solo sa come reindirizzare a una pagina di errore, che non è generalmente quello che si vuole fare in risposta ad un errore di validazione lato server anche con un "normale" POST, e certamente non con un posto AJAX.

Ci sono davvero due diversi scenari è necessario gestire:

  1. Gli errori di convalida sono guasti non catastrofici; sono semplicemente i dati degli utenti cattivi, che si dovrebbe aspettare. Hai solo bisogno di ottenere le informazioni di tornare alla pagina, in modo che la pagina può essere contrassegnato fino a dire all'utente come risolvere i loro dati.
  2. È inoltre necessario gestire guasti catastrofici, come eccezioni impreviste. Questo è simile a quello che fa HandleErrorAttribute, nella misura in cui è possibile visualizzare un messaggio a un utente, ma non si può necessariamente corrispondere a quello messaggio con campi specifici sulla vostra pagina.

Per gestire il primo scenario di errore, è necessario avvolgere il modello di stato fino in un oggetto che sarà analizzabile nel codice JavaScript; JSON è la soluzione ovvia. È quindi necessario avere il codice JavaScript sul lato client, che analizza l'oggetto e segna i campi del modulo. Questo è più facile se si legano in un quadro di convalida lato client esistente, che già contiene il codice per la marcatura su campi del modulo.

Per gestire il secondo tipo di errore, è possibile estendere HandleErrorAttribute al fine di fornire JSON invece di HTML in caso di un errore irreversibile. Anche in questo caso, è necessario scrivere il codice JavaScript che verrà eseguito in caso di guasto - evento ajaxError globale di jQuery è utile qui - che rileva le informazioni degli errori strutturata che hai creato e visualizzare una sorta di messaggio utile per l'utente .

Se tutto questo suona un po 'coinvolto, beh, è, è per questo che può rendere più senso aspettare e vedere cosa sarà costruito-in quando MVC 2 è finalmente uscito.

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