Qual è il modo migliore per implementare la convalida dei campi utilizzando ASP.NET MVC?

StackOverflow https://stackoverflow.com/questions/16747

  •  08-06-2019
  •  | 
  •  

Domanda

Sto costruendo un sito Web pubblico utilizzando ASP.NET, come parte del risultato finale devo creare un sito di amministrazione per l'immissione dei dati del materiale mostrato nel sito pubblico, mi chiedevo quali tecniche o procedure utilizzano le persone per convalidare le voci utilizzando ASP.NET .NETMVC.

È stato utile?

Soluzione

Dai un'occhiata a Plug-in di convalida JQuery questo plugin è fantastico, è semplice da implementare e ha tutte le funzionalità di cui potresti aver bisogno, inclusa la convalida remota tramite AJAX.

È inoltre possibile trovare un metodo di controllo MVC di esempio Qui che fondamentalmente utilizza il tipo di azione JsonResult come:

public JsonResult CheckUserName(string username)
{
    return Json(CheckValidUsername(username));
}

Altri suggerimenti

@Chuck: non è ancora possibile utilizzare i controlli AjaxToolKit in ASP.NET MVC.Funzionano solo nel modello di postback della pagina ASP.NET.

Aggiornamento:

A partire dal 20 agosto 2008, è possibile utilizzare solo i file di script di Ajax Control Toolkit all'interno di ASP.NET MVC Framework.Ecco un collegamento a pubblicazione.

Anche, ecco un tutorial su come usarli per creare un calendario popup di Stephen Walther.

Voglio solo assicurarmi che a tutti vengano fornite le informazioni giuste, se leggono questo thread.

IMO utilizzando xVal con jQuery e DataAnnotationsModelBinder è la migliore combinazione.

A volte, tuttavia, esistono regole di convalida che non possono essere controllate interamente dal lato client, quindi è necessario utilizzare la convalida lato client remota.

Ho trovato il modo di implementare genericamente la convalida remota lato client con xVal/jQuery.validate in modo che

  • Le regole di convalida rimangono esclusivamente nel modello ASP.NET MVC
  • Scrivi ogni regola di convalida una sola volta e solo in codice C# facilmente testabile.Non esiste JavaScript o altra controparte lato client.
  • Non è necessario creare diramazioni o modificare in altro modo xVal o jquery.validate
  • Tutto quello che devi fare per ogni nuova regola di convalida del modulo remoto è derivare dalla classe base mostrata in questo articolo.

Ho scritto un articolo del blog su questo descrivendo tutti i dettagli.

Mi piace usare il LiveValidazione libreria all'interno delle mie app ASP.NET MVC.Con esso, sono stato in grado di impostare un modo per eseguire la convalida sul client e sul server.In questo modo l'utente saprà che c'è qualcosa che non va prima ancora di inviare il modulo e quindi utilizzerà la funzionalità lato server per gli altri casi periferici.

Ho iniziato con questo post che fa un ottimo lavoro su come impostare una configurazione simile:

Convalida lato client basata su modello per ASP.NET MVC

A modo mio:

Sto seguendo l'esempio mostrato nel controller dell'account fornito con la versione Preview 4, dove il campo è selezionato nel controller e se viene riscontrato un errore, viene aggregata una serie di errori di stringa per essere successivamente mostrati nella stessa vista che ha avviato il richiesta.

Ho anche seguito i pensieri di Stephen Walther su MVC e io penso questo post è ottimo ripopolare i campi con i dati inviati affinché vengano modificati prima di inviarli nuovamente.

Cosa utilizzate?

Hai dato un'occhiata ai controlli forniti con AjaxToolKit?Ho utilizzato MaskedEditExtender e ValidatorCalloutExtender e sono rimasto molto soddisfatto dei risultati.

@Dale - grazie per avermi corretto su quello!Non ne ero a conoscenza (ho appena iniziato a utilizzare il toolkit la settimana scorsa).Per favore, ignora il mio suggerimento :)

@Zack:Sì, ho letto anche quel post e, basandomi su quel post, SO utilizza jQuery come libreria javascript.Non posso parlare a nome del team SO, ma la mia ipotesi plausibile è che molto probabilmente stiano utilizzando le funzionalità Ajax all'interno di jquery per gestire le loro richieste Ajax.In realtà non è poi così male codificare a mano se usi una libreria javascript come jQuery, Prototipo, E MooTools.Quindi utilizzi il nuovo valore restituito JsonResult ActionResult per le tue azioni ed effettui richieste Ajax contro di esse.Queste librerie incapsulano per te gli oggetti XmlHttpRequest e semplificano la sicurezza delle chiamate Ajax e del browser.

Puoi usare il quadro di convalida .net su codeplex se si desidera la convalida lato client/server.Genera codice per il plug-in di convalida jQuery in base alle regole definite nel modello.Inoltre, se utilizzi la funzionalità "avanzata" del framework puoi controllare manualmente le impostazioni del plug-in di convalida jQuery.Controlla il avvio rapido di mvc.

Utilizzare un ibrido di convalida lato client e convalida lato server.

Per la convalida lato client, l'approccio descritto nel file risposta di Daniel Pollard sembra sano.La convalida lato client non è obbligatoria ma fornirà all'utente un'esperienza migliore e molto più reattiva.

La validazione lato server, invece, dovrebbe essere obbligatoria:non fidarsi mai dell'input del client.Vorrei sicuramente esaminare le funzionalità fornite dal framework ASP.NET MVC nell'anteprima 5 (come descritto nella sezione risposta di Matt Hinze),

Il mio modo preferito esegue la convalida sia del client che del server utilizzando attributi basati su modello.Ho scritto un breve post a riguardo e ho rilasciato anche il codice sorgente, che sostanzialmente ti consentirà di creare una classe come questa



class User {

    [Required]
    public string Name{get;set;}

    [Email][Required]
    public string Email {get;set;}
}

E verrà generato il codice JavaScript appropriato per eseguire la convalida del client, così come il corridore di convalida lato server convaliderà il modulo inviato.

Leggi il post Qui

@Mandrino - Nessun problema.Questo è lo scopo di SO.Impari qualcosa e la persona che fa la domanda impara qualcosa.

Come viene gestito AJAX su Stack Overflow?JQuery lo fa?

  • Fare clic con il tasto destro sulla pagina
  • Cerca "Visualizza sorgente pagina" nel menu a comparsa
  • Cliccalo

:-)

Se vuoi mantenere le funzionalità predefinite ma devi estenderle, dai un'occhiata a la mia risposta qui a una domanda su IDataError.

Fondamentalmente utilizzo annotazioni di dati e un raccoglitore di modelli per una logica più complicata.Ho trovato che sia un modo abbastanza pulito e mi permette di rimanere entro i limiti di ciò che la SM offre.

Spiego come utilizzare un raccoglitore di modelli per aggiungere il controllo "a livello di classe" del modello senza doverlo utilizzare IDataError - che come hai visto qui può essere piuttosto goffo.Ti consente comunque di utilizzare gli attributi [Obbligatori] o qualsiasi altro attributo di convalida personalizzato di cui disponi, ma ti consente di aggiungere o rimuovere singoli errori del modello.Per ulteriori informazioni su come utilizzare le annotazioni dei dati, lo consiglio vivamente questo post di Scott Gu.

Uno dei modi per implementare la convalida in ASP.NET MVC consiste nell'usare le annotazioni dei dati insieme alla convalida lato client.Questo articolo mostra come possiamo farlo per le classi di modello generate da Entity Framework.

Dale Ragan ha scritto:

Non è possibile usare i controlli AjaxToolKit in ASP.NET MVC

Come viene gestito AJAX su Stack Overflow?JQuery lo fa?Nel suo post Coding Horror I segreti dei ninja JavaScript Jeff ha scritto sull'utilizzo di JQuery durante la scrittura di Stack Overflow.

Sicuramente non l'hanno codificato a mano.L'ho fatto una volta con tutto il JavaScript XMLHttpRequest quando il termine "AJAX" è diventato popolare intorno al 2005.È stato un incubo.

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