Validazione in Wisej.NET
Ogni applicazione gestionale vive o muore sui dati che le persone vi inseriscono. Questo corso per principianti ti insegna a validare quell'input alla maniera di Wisej.NET — intercettando gli errori mentre l'utente modifica, spiegandoli con parole semplici e assicurandoti che dati errati non possano mai essere salvati — il tutto costruito attorno al progetto ValidationClinic, un modulo di registrazione clienti e una griglia di contatti modificabile. Sette moduli partono dal ciclo di vita della validazione — Validating, Validated, e.Cancel, AutoValidate e ValidateChildren — per passare poi al feedback con ErrorProvider e ai riepiloghi visibili, all'extender Validation e alle sue regole predefinite, e alla validazione personalizzata con servizi riutilizzabili e classi ValidationRule. Da lì validerai il modello stesso con il data binding, DataAnnotations e IDataErrorInfo, validerai celle e righe della DataGridView e concluderai con una pipeline di salvataggio completa e un error provider personalizzato nel capstone. È pensato per sviluppatori che conoscono le basi di C# e stanno iniziando a creare form Wisej.NET.
Valida in modo chiaro form, griglie ed editor associati ai dati — eventi, ErrorProvider, regole di validazione, errori del modello e celle della griglia.
- Livello: Beginner
- Durata: 8 ore
- Moduli: 7
Programma
Modulo 1: Fondamenti di validazione in Wisej.NET
Modulo 1 di Validazione in Wisej.NET — costruisci form, griglie ed editor con data binding che validano l'input in modo chiaro e non salvano mai dati errati. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sui fondamenti della validazione, supera la verifica delle conoscenze e completa il lab pratico in ValidationClinic.
- LetturaGuida della lezione · 14 min
Che cosa significa la validazione in una UI Wisej.NET lato server: il ciclo di vita di Validating e Validated, il rifiuto dell'input non valido con e.Cancel, il comportamento del focus con AutoValidate, CausesValidation sui pulsanti Cancel e ValidateChildren come protezione di Save. Che cosa significa per uno sviluppatore che conosce le basi di C# e sta iniziando a sviluppare form con Wisej.NET — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoQuando viene eseguita la validazione e che cosa blocca un salvataggio errato · 14 min
Quando viene eseguita la validazione e che cosa blocca un salvataggio errato — una videoguida del Modulo 1, costruita passo dopo passo in ValidationClinic. Parte direttamente qui nel player.
Trascrizione della narrazione
Costruisci il modulo di assunzione ValidationClinic attorno a due opportunità per individuare gli errori: quando l'utente lascia un campo e quando l'utente salva. In Wisej.NET, questi controlli funzionano insieme in modo che un campo non modificato non possa sfuggire alla convalida.
Esegui controlli rapidi nell'evento Validating, prima che l'utente prosegua. Il browser segnala la modifica del focus, ma il gestore C sharp viene eseguito sul server. Mantenere il gestore breve evita di rallentare la navigazione ordinaria.
Utilizzare Convalida per decidere se il valore è accettabile. Annulla l'evento e spiega il problema quando non lo è. Convalidato segue solo un controllo riuscito, rendendolo il luogo appropriato per la pulizia, ad esempio la rimozione di un nome accettato.
Imposta il comportamento AutoValidate del modulo nel suo costruttore. In ciascun gestore, SetError spiega un valore rifiutato e e.Cancel lo rifiuta. Cancellare il messaggio dopo la correzione in modo che l'interfaccia rifletta il valore corrente anziché un errore precedente.
Mantieni l'attenzione su un campo non valido quando l'utente deve correggerlo. Assegna a Cancel una via di fuga separata impostando CausesValidation su false. In caso contrario, la convalida potrebbe impedire a qualcuno di abbandonare un modulo incompleto.
Prima di scrivere al cliente, chiamare ValidateChildren da Save. Questo controlla anche i campi che l'utente non ha mai visitato. Se qualche gestore annulla la validazione, interrompi il salvataggio; solo i valori accettati dovrebbero raggiungere l'operazione di scrittura e la sua gestione delle eccezioni.
Guarda il nome vuoto mantenere il focus mentre l'icona di errore spiega il perché. Dopo la correzione, il nome accettato viene tagliato. L'e-mail non valida viene rifiutata in modo indipendente, mentre Annulla chiude comunque il modulo senza richiedere la correzione di nessuno dei due campi.
Prova a salvare prima di toccare il campo e-mail. ValidateChildren rileva l'input mancante e impedisce la scrittura anche se non si è verificato alcun cambiamento di focus. Correggere l'indirizzo e salvare nuovamente per confermare che l'input valido segua il percorso corretto.
Per questo lab, collega la convalida del campo, la pulizia del valore riuscito e il controllo finale del salvataggio in un unico modulo di assunzione. Prova Annulla anche con input non validi. La nota di laboratorio dovrebbe spiegare in che modo questi percorsi impediscono dati errati senza intrappolare l'utente.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto ValidationClinic di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 1 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — Validating, Validated e un salvataggio protetto · 45 min
Obiettivo: Crea il form di registrazione clienti di ValidationClinic con i TextBox txtName e txtEmail, un pulsante Save e un pulsante Cancel. Collega gestori Validating che impostano e.Cancel = true e un messaggio dell'ErrorProvider quando il nome è vuoto o l'email non contiene @, cancellano il messaggio quando il valore è valido, poi togli gli spazi dal nome nel suo gestore Validated. Imposta la modalità AutoValidate del form, assicurati che Cancel non avvii la validazione così che l'utente possa sempre uscire, e chiama ValidateChildren() all'inizio di btnSave_Click così che Save si fermi quando un campo non è valido. Concludi con una breve nota del lab che spiega il comportamento del focus che hai scelto. Deliverable: form di registrazione clienti con txtName e txtEmail, un pulsante Save e un pulsante Cancel; gestori Validating che impostano e.Cancel = true e un messaggio di errore per un nome vuoto e un'email non valida; gestore Validated che toglie gli spazi dal nome accettato; gestore di Save che chiama ValidateChildren() e si ferma quando restituisce false; nota del lab che indica la modalità AutoValidate scelta e perché Cancel funziona anche su un form non valido.
Modulo 2: Validazione programmatica e feedback con ErrorProvider
Modulo 2 di Validazione in Wisej.NET — costruisci form, griglie ed editor con data binding che validano l'input in modo chiaro e non salvano mai dati errati. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sul feedback con ErrorProvider, supera la verifica delle conoscenze e completa il lab pratico in ValidationClinic.
- LetturaGuida della lezione · 14 min
Un solo ErrorProvider per form, SetError e la rimozione degli errori controllo per controllo, InvalidMessage per un feedback semplice e locale, un piccolo tipo di risultato FieldValidation che tiene le regole fuori dalla UI e un riepilogo di validazione visibile, così che nessun errore dipenda dal passare il mouse su un'icona. Che cosa significa per uno sviluppatore che conosce le basi di C# e sta iniziando a sviluppare form con Wisej.NET — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoIcone, messaggi e un riepilogo che nessuno può non vedere · 14 min
Icone, messaggi e un riepilogo che nessuno può non vedere — una videoguida del Modulo 2, costruita passo dopo passo in ValidationClinic. Parte direttamente qui nel player.
Trascrizione della narrazione
Dai al modulo di contatto un feedback che resta utile dopo il primo errore. Un ErrorProvider gestisce le icone, gli helper riutilizzabili decidono quali valori non sono validi e un riepilogo visibile consente agli utenti di rivedere insieme ogni problema.
Separare il controllo di un valore dalla visualizzazione del suo errore. I gestori dei campi indipendenti possono lasciare icone obsolete o cancellare messaggi non correlati. Un approccio condiviso fa sì che ogni correzione influisca sul campo pertinente preservando i problemi che necessitano ancora di attenzione.
Scegli il modo in cui ciascun messaggio raggiunge l'utente. SetError aggiunge un'icona accanto a un input, mentre InvalidMessage fornisce il tooltip del controllo. Il riepilogo fornisce testo leggibile per l'intero modulo, quindi gli errori non sono rilevabili solo passando il mouse.
Configura un singolo ErrorProvider per il modulo, con le icone fisse posizionate a destra. Lascia che ValidateEmail restituisca un risultato FieldValidation invece di modificare i controlli. Questa separazione mantiene la regola riutilizzabile e lascia la presentazione al modulo.
Applicare elabora ogni risultato, compresi quelli di successo. Un messaggio vuoto rimuove la vecchia icona di quel campo; anche i risultati non validi popolano il riepilogo. Restituendo se tutti i risultati sono stati superati, Salva una decisione chiara prima che i dati vengano scritti.
Abbina il feedback al problema. Inserisci una correzione sul campo accanto al suo input, spiega una regola aziendale nel riepilogo del salvataggio e invia un messaggio amichevole a un errore di sistema. Gli utenti devono comprendere quale azione è a loro disposizione.
Salva il modulo con i tre campi di contatto non validi. Confronta le icone locali con il riepilogo: entrambe dovrebbero descrivere gli stessi problemi rimanenti. La descrizione comando del codice cliente mostra il percorso di visualizzazione alternativo senza sostituire la spiegazione a livello di modulo.
Correggi solo l'e-mail e lascia quel campo. La sua icona e la voce di riepilogo scompaiono, ma rimangono il nome e i messaggi del telefono. Ciò dimostra perché i singoli risultati devono eliminare errori individuali anziché eliminare l'intero fornitore.
Costruisci gli aiutanti, condividi ErrorProvider e applica il metodo come un unico percorso di feedback. Verificare che la correzione di un campo conservi gli altri errori. Confronta il codice cliente InvalidMessage con le icone e il riepilogo per spiegare quando ogni presentazione è utile.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto ValidationClinic di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 2 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — ErrorProvider, metodi helper e un riepilogo di validazione · 45 min
Obiettivo: Trasforma il form di contatto di ValidationClinic in un form con validazione programmatica. Crea un solo ErrorProvider per il form con ContainerControl impostato, NeverBlink e l'icona allineata a destra, scrivi un record FieldValidation più gli helper ValidateName, ValidateEmail e ValidatePhone che restituiscono un messaggio invece di toccare la UI, e un metodo Apply che chiama SetError per ogni risultato e compila una validationSummaryLabel visibile solo finché esistono errori. Usa InvalidMessage sul campo del codice cliente per confrontare i due stili di feedback, e assicurati che correggere un campo rimuova solo l'errore di quel campo. Deliverable: ErrorProvider a livello di form con ContainerControl, BlinkStyle e allineamento dell'icona configurati; record FieldValidation e metodi helper ValidateName, ValidateEmail e ValidatePhone; metodo Apply che imposta o rimuove l'errore di ogni controllo e restituisce se tutti i campi sono validi; validationSummaryLabel che elenca ogni problema attuale ed è nascosta quando non ce ne sono; un campo che usa InvalidMessage invece di ErrorProvider, con una nota che confronta i due approcci.
Modulo 3: Regole di validazione integrate e l'extender Validation
Modulo 3 di Validazione in Wisej.NET — costruisci form, griglie ed editor con data binding che validano l'input in modo chiaro e non salvano mai dati errati. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sull'extender Validation, supera la verifica delle conoscenze e completa il lab pratico in ValidationClinic.
- LetturaGuida della lezione · 14 min
L'extender Validation di Wisej.NET: la proprietà estesa ValidationRules in fase di progettazione, SetValidationRules a runtime, le regole Required, Email, Integer, Decimal, Currency, Telephone e Regex, l'ordine delle regole che si ferma al primo errore e le destinazioni di visualizzazione ErrorProvider o Label. Che cosa significa per uno sviluppatore che conosce le basi di C# e sta iniziando a sviluppare form con Wisej.NET — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoDichiara le regole una volta e lascia che le esegua l'extender · 14 min
Dichiara le regole una volta e lascia che le esegua l'extender — una videoguida del Modulo 3, costruita passo dopo passo in ValidationClinic. Parte direttamente qui nel player.
Trascrizione della narrazione
Spostare le regole dei campi ripetuti nell'extender di convalida. In Wisej.NET, la descrizione dei requisiti di ciascun campo consente all'extender di eseguire controlli coerenti per ValidationClinic, mentre il modulo rimane responsabile della presentazione di feedback utili all'utente.
L'extender si connette a Validating e Validated sui controlli. Invece di ripetere lo stesso controllo di valori vuoti in diversi gestori, allega i metadati della regola a ciascun campo. Il flusso degli eventi rimane familiare mentre le definizioni diventano più facili da condividere.
Scegli una regola integrata per il tipo di valore che accetti, ad esempio email, numero intero, valuta o telefono. Utilizza un'espressione regolare quando il modello richiesto lo richiede. Assegna a ciascuna regola un InvalidMessage che spieghi la correzione nella lingua dell'utente.
Aggiungi Validazione nella finestra di progettazione, quindi apri la raccolta ValidationRules di un controllo. Inserisci obbligatorio prima dell'e-mail. L'ordine di raccolta è anche ordine di esecuzione, quindi la disposizione di queste voci determina quale spiegazione riceve per prima l'utente.
Un errore di regola interrompe le regole rimanenti e annulla la convalida. Ecco perché un'e-mail vuota dovrebbe fallire. Obbligatorio innanzitutto: chiedere un indirizzo mancante è più utile che segnalare un problema di formato prima che esista l'indirizzo.
La configurazione del runtime segue lo stesso modello di regole. Crea gli array una volta in ClinicRules, seleziona la destinazione di visualizzazione, quindi assegna ciascun campo tramite SetValidationRules. Mantenere insieme le definizioni evita copie leggermente diverse della stessa regola tra i moduli.
Confronta un indirizzo vuoto, un indirizzo non corretto e uno valido. Ogni tentativo dovrebbe produrre solo il primo errore applicabile. Quando il valore diventa valido, sia l'icona che la voce di riepilogo vengono cancellate, confermando che la presentazione segue l'ultimo risultato di convalida.
Le regole possono inviare feedback al controllo, a uno ErrorProvider o a un'etichetta. Scegli deliberatamente la destinazione, quindi aggiorna il riepilogo dagli eventi dell'extender. Ciò mantiene il riepilogo sincronizzato con i controlli effettivamente eseguiti.
Sostituisci i gestori ripetuti con le definizioni ClinicRules condivise. Mantieni prima Richiesto e collega il riepilogo agli eventi dell'extender. Il test dovrebbe mostrare che i valori vuoti, non corretti e corretti producono il messaggio appropriato senza conservare un feedback obsoleto.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto ValidationClinic di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 3 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — Regole, ordine delle regole e destinazioni di visualizzazione · 45 min
Obiettivo: Sostituisci i gestori dei campi scritti a mano in ValidationClinic con l'extender Validation. Aggiungi un componente Validation e un ErrorProvider al form di accettazione, imposta ContainerControl e validation.ErrorProvider, poi chiama SetValidationRules in un metodo ConfigureValidationRules: Required e poi Email su txtEmail, Required e poi Integer su txtAge, Required e poi Telephone su txtPhone, Currency su txtCreditLimit e una regola Regex per il codice cliente. Metti Required per prima ovunque così vince il messaggio più utile, aggancia l'evento Validating dell'extender per aggiornare il riepilogo e sposta gli array di regole in un piccolo helper riutilizzabile così un altro form può applicare la stessa configurazione. Deliverable: componente Validation collegato al form e a un ErrorProvider come destinazione di visualizzazione; metodo ConfigureValidationRules che chiama SetValidationRules per email, età, telefono, fido e codice cliente; regola Required posta per prima su ogni campo obbligatorio, con testo InvalidMessage in linguaggio semplice; gestore Validating dell'extender che mantiene il riepilogo di validazione allineato alle regole; helper di configurazione delle regole riutilizzabile che un secondo form può chiamare.
Modulo 4: Validazione personalizzata: metodi, servizi e classi ValidationRule
Modulo 4 di Validazione in Wisej.NET — costruisci form, griglie ed editor con data binding che validano l'input in modo chiaro e non salvano mai dati errati. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sulla validazione personalizzata, supera la verifica delle conoscenze e completa il lab pratico in ValidationClinic.
- LetturaGuida della lezione · 14 min
Le regole di business che le regole integrate non sanno esprimere: metodi di validazione che restituiscono una stringa, un servizio ContactValidator testabile senza la UI, una classe ValidationRule personalizzata con OnValidating, OnValidated e OnControlCreated, e regole tra campi che segnalano ogni controllo coinvolto. Che cosa significa per uno sviluppatore che conosce le basi di C# e sta iniziando a sviluppare form con Wisej.NET — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoDai controlli occasionali a regole riutilizzabili e testabili · 14 min
Dai controlli occasionali a regole riutilizzabili e testabili — una videoguida del Modulo 4, costruita passo dopo passo in ValidationClinic. Parte direttamente qui nel player.
Trascrizione della narrazione
Modulo quattro. Convalida personalizzata in Wisej.NET. Un modulo può accettare valori formattati correttamente che comunque infrangono le regole aziendali. Risolviamolo.
Le regole integrate controllano la forma di un valore. Ma una data valida può comunque essere successiva a una data di fine e una data di nascita valida può appartenere a qualcuno troppo giovane. Queste sono le regole aziendali. Quando confronti i campi, calcoli un'età o controlli i valori insieme, scrivi una regola di convalida personalizzata.
La convalida personalizzata ha tre case. Innanzitutto, un metodo che restituisce un messaggio di errore. In secondo luogo, un servizio che restituisce i record ValidationMessage. In terzo luogo, una classe derivata da ValidationRule eseguita dall'extender di convalida. Scegli la casa che si adatta alla responsabilità del tuo governo.
ValidateStartEndDates restituisce una stringa vuota quando le date sono valide o un messaggio di errore quando non lo sono. Applica lo stesso messaggio a entrambi i selettori di date. Il servizio ContactValidator non ha alcuna dipendenza dai controlli. Convalida il modello, in modo da poter testare la logica aziendale senza l'interfaccia utente.
MinimumAgeValidationRule deriva da ValidationRule. Il suo metodo OnValidating restituisce vero o falso. Allega la regola al selettore della data di nascita con SetValidationRules. ApplyModelValidation collega i risultati del servizio allo schermo. Associa i nomi dei campi ai controlli, quindi ogni messaggio viene visualizzato in cui l'utente può risolvere il problema.
Il gestore Save esegue la convalida in ordine. Innanzitutto, controlla le regole del campo. Quindi esegui il servizio di convalida e la regola della data. Ritorna presto se uno strato fallisce. Chiamare il repository solo dopo aver superato ogni controllo. Il database non dovrebbe mai ricevere dati che la tua convalida ha già rifiutato.
Ora prova a salvare con la data di inizio successiva alla data di fine. Entrambi i selettori mostrano lo stesso errore e il riepilogo visualizza un singolo messaggio.
Correggere la data di fine. Entrambi gli errori si risolvono insieme. Poiché questa regola confronta due valori, entrambi i controlli condividono il feedback.
Inserisci una data di nascita tra le venti undici. La regola dell'età minima la rifiuta non appena l'utente lascia il selettore.
Correggi la data di nascita e l'errore verrà cancellato. Salva ora esegue correttamente ogni livello di convalida, quindi memorizza il contatto esattamente una volta.
Per il laboratorio quattro, implementare il controllo della data, il servizio di convalida, la mappatura dei messaggi e la regola dell'età minima.
Collegali in un gestore di salvataggio che non salva mai dati non validi.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto ValidationClinic di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 4 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — Servizio di validazione e una ValidationRule personalizzata · 45 min
Obiettivo: Aggiungi la validazione personalizzata a ValidationClinic in tre passi. Scrivi ValidateStartEndDates come metodo che restituisce una stringa vuota quando i dati sono validi e un messaggio quando la data di inizio è successiva alla data di fine, e imposta quel messaggio sia su dtpStart sia su dtpEnd. Sposta le regole su nome, email e data di nascita in un servizio ContactValidator che restituisce una lista di record ValidationMessage e riporta ogni nome di campo al suo controllo in ApplyModelValidation. Poi crea MinimumAgeValidationRule derivata da ValidationRule con una proprietà MinimumAge, fai l'override di OnValidating per calcolare l'età dal DateTimePicker, collegala a dtpBirthDate tramite l'extender Validation ed esegui il servizio in btnSave_Click prima che venga salvato qualsiasi dato. Deliverable: metodo ValidateStartEndDates che imposta lo stesso errore su entrambi i selettori di data e li cancella entrambi una volta corretti; servizio ContactValidator che restituisce record ValidationMessage per nome, email e data di nascita; metodo ApplyModelValidation che associa ogni nome di campo al suo controllo e al riepilogo; classe MinimumAgeValidationRule con override di OnValidating, collegata a dtpBirthDate; gestore di Save che esegue le regole dei campi, poi il servizio di validazione, e solo allora salva.
Modulo 5: Validazione con data binding ed errori del modello
Modulo 5 di Validazione in Wisej.NET — costruisci form, griglie ed editor con data binding che validano l'input in modo chiaro e non salvano mai dati errati. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sulla validazione con data binding, supera la verifica delle conoscenze e completa il lab pratico in ValidationClinic.
- LetturaGuida della lezione · 14 min
Validare il modello, non solo i controlli: BindingSource ed EndEdit, DataAnnotations eseguite con Validator.TryValidateObject, la mappatura dei MemberNames sui controlli, IDataErrorInfo con un ErrorProvider con data binding, BindToDataAndErrors e l'ordine sicuro del salvataggio. Che cosa significa per uno sviluppatore che conosce le basi di C# e sta iniziando a sviluppare form con Wisej.NET — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoLascia che sia il modello a dire che cosa è valido · 14 min
Lascia che sia il modello a dire che cosa è valido — una videoguida del Modulo 5, costruita passo dopo passo in ValidationClinic. Parte direttamente qui nel player.
Trascrizione della narrazione
Modulo cinque. Convalida associata ai dati in Wisej.NET. Il modulo di assunzione ora modifica un modello di modifica del contatto. Le sue regole di convalida di base appartengono ai dati, quindi le stesse regole possono proteggere il modulo, la griglia e altri modi per modificare un contatto.
Un gestore di moduli protegge solo le modifiche apportate tramite quel modulo. Una griglia, un'importazione o un servizio possono aggiornare lo stesso contatto senza eseguire tali gestori. Inserisci le regole di base nel modello, quindi esegui ogni percorso di salvataggio prima di accettare i dati.
Innanzitutto, completa la modifica corrente. Il valore ancora in fase di digitazione potrebbe non aver ancora raggiunto il modello. Fine chiamata Modifica sull'origine di associazione del contatto prima della convalida. Altrimenti, il validatore potrebbe controllare un valore più vecchio anche se l'utente ha già corretto il campo.
Le annotazioni sui dati descrivono le regole, ma non vengono eseguite da sole. Prova Validate Object li applica e raccoglie i risultati. Imposta valida tutte le proprietà su true. Senza questa opzione, viene selezionato solo Obbligatorio, quindi un'e-mail in formato non valido o un'età fuori dall'intervallo potrebbero passare.
Il validatore restituisce nomi di proprietà, non controlli. Utilizza una mappa del campo per collegare ciascun risultato all'input corretto. Inserisci il messaggio accanto a quell'input e nel riepilogo. Se una proprietà non ha un controllo corrispondente, mantieni il messaggio nel riepilogo in modo che l'errore sia ancora visibile.
C'è un altro approccio. Un modello che implementa I Data Error Info risponde alle domande di convalida per ciascuna proprietà. Un provider di errori associato a dati legge queste risposte. Quando si cambiano le origini in fase di runtime, Bind To Data And Errors imposta l'origine e il membro insieme, evitando una mancata corrispondenza temporanea.
Prova a salvare il contatto non valido. End Edit innanzitutto conferma l'input corrente nel modello. I controlli delle annotazioni rifiutano il nome, l'e-mail e l'età. La mappa del campo inserisce ogni messaggio accanto al suo input e nel riepilogo. Il percorso di salvataggio si interrompe prima di scrivere qualsiasi cosa.
Correggere i valori e salvare nuovamente. I controlli ora passano e il contatto viene salvato. Nel modello I Data Error Info, la cancellazione del nome ripristina l'icona di errore tramite l'associazione dati. Non è necessario che il modulo chiami Set Error per tale modifica.
Per il quinto laboratorio, associa l'editor al modello, completa le modifiche prima della convalida e mappa i risultati delle annotazioni sui campi e sul riepilogo. Collegare quindi il modello I Data Error Info tramite Bind To Data And Errors. Verificare che i dati non validi non raggiungano mai il repository.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto ValidationClinic di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 5 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — DataAnnotations, IDataErrorInfo ed EndEdit · 45 min
Obiettivo: Collega il form di inserimento di ValidationClinic a un ContactEditModel tramite un contactBindingSource e aggiungi le annotazioni Required, StringLength, EmailAddress e Range alle sue proprietà Name, Email e Age. In btnSave_Click chiama per prima cosa contactBindingSource.EndEdit(), esegui Validator.TryValidateObject con validateAllProperties impostato a true e mappa il nome del membro di ogni ValidationResult sul suo controllo tramite una mappa dei campi e il riepilogo di validazione. Poi implementa IDataErrorInfo su un secondo modello, punta l'ErrorProvider alla binding source con BindToDataAndErrors e mostra gli stessi errori che compaiono tramite data binding senza una chiamata a SetError scritta a mano. Deliverable: ContactEditModel con DataAnnotations collegato al form tramite un BindingSource; gestore del salvataggio che chiama EndEdit prima di eseguire Validator.TryValidateObject; mappa dei campi che trasforma i nomi dei membri dei ValidationResult in errori dei controlli e righe del riepilogo; modello IDataErrorInfo i cui errori compaiono tramite un ErrorProvider con data binding; chiamata a BindToDataAndErrors usata quando la sorgente dati del provider cambia a runtime.
Modulo 6: Validazione delle celle del DataGridView ed errori di riga
Modulo 6 di Validazione in Wisej.NET — costruisci form, griglie ed editor con data binding che validano l'input in modo chiaro e non salvano mai dati errati. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sulla validazione della griglia, supera la verifica delle conoscenze e completa il lab pratico in ValidationClinic.
- LetturaGuida della lezione · 14 min
La validazione su scala di griglia: CellValidating con RowIndex, ColumnIndex e il FormattedValue non ancora confermato, CellValidated per fare pulizia, ErrorText di cella rispetto a ErrorText di riga, DataError con ThrowException impostato a false, e regole per le righe nuove e le righe collegate ai dati che non interrompono la modifica. Che cosa significa per uno sviluppatore che conosce le basi di C# e sta iniziando a sviluppare form con Wisej.NET — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoValida la cella che l'utente sta ancora modificando · 14 min
Valida la cella che l'utente sta ancora modificando — una videoguida del Modulo 6, costruita passo dopo passo in ValidationClinic. Parte direttamente qui nel player.
Trascrizione della narrazione
La griglia dei contatti introduce un percorso di modifica diverso rispetto al modulo di assunzione. Una cella ha il proprio editor ed eventi di convalida, quindi riutilizza lo stesso intento aziendale tramite i gestori della griglia anziché aspettarti che i gestori dei campi di testo del modulo vengano eseguiti.
Separa i tre problemi prima di scegliere un gestore. Il formato email appartiene alla cella, l'età non numerica può non riuscire nella conversione e un contatto chiuso senza una data di chiusura viola una regola tra i campi. Un controllo non può spiegare tutti e tre in modo affidabile.
Durante la modifica, convalida e.FormattedValue perché contiene ciò che l'utente sta digitando ora. Lo Value memorizzato nella cella rappresenta ancora il precedente input impegnato. Controllare quel vecchio valore potrebbe accettare proprio l'errore appena introdotto dall'utente.
Utilizza il nome della colonna per selezionare la regola in CellValidating. Cancella il messaggio precedente di quella cella, controlla il valore modificato e annulla con una spiegazione chiara quando fallisce. Ciò mantiene l'utente accanto all'input che necessita di correzione.
Inserisci un errore a valore singolo nella cella e un errore di relazione nella riga. Prenota DataError per la conversione o il salvataggio degli errori segnalati dalla griglia. Salta il segnaposto della nuova riga, poiché non è ancora un contatto che richiede la convalida.
ValidateRow aggiorna insieme il messaggio della riga e la cella della data di chiusura, rendendo la relazione visibile a entrambi i livelli. In DataError, spiegare gli errori di conversione in un linguaggio normale e registrare l'eccezione separatamente in modo che la diagnosi non diventi responsabilità dell'utente.
Prova prima l'e-mail non valida: la convalida mantiene la modifica in atto e visualizza l'errore della cella. Quindi inserisci le lettere per l'età. Il simpatico messaggio di conversione mostra un diverso percorso di errore, anche se entrambi gli errori si sono verificati durante la modifica di una cella.
Il contatto chiuso non può ancora essere salvato finché non viene raggiunta la data di chiusura richiesta. L'errore di riga mantiene visibile la relazione, mentre il segnaposto viene ignorato. Immettere la data e salvare nuovamente per verificare che la correzione della regola consenta la persistenza.
Costruisci i controlli della griglia in base al valore modificato corrente, alle relazioni tra righe e agli errori di conversione semplici. Cancella gli errori delle celle riuscite e proteggi il salvataggio dagli errori rimanenti. Testare ogni livello separatamente in modo che una cella valida non possa nascondere una riga di contatti non valida.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto ValidationClinic di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 6 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — Regole di cella, errori di riga e DataError · 45 min
Obiettivo: Fai in modo che la griglia dei contatti di ValidationClinic rifiuti i dati errati. Gestisci gridContacts.CellValidating: leggi e.FormattedValue invece del valore della cella, cancella l'ErrorText della cella, poi rifiuta un valore di EmailColumn vuoto o senza @ e un valore di AgeColumn fuori dall'intervallo da 0 a 120 con e.Cancel = true e un ErrorText di cella. Aggiungi un metodo ValidateRow che imposta l'ErrorText di riga e l'errore sulla cella ClosedDateColumn quando lo stato è Closed senza data di chiusura, cancella gli errori superati in CellValidated e gestisci DataError con ThrowException = false, un messaggio comprensibile sulla cella e un log di debug dell'eccezione. Salta la riga nuova segnaposto finché non contiene dati dell'utente, e blocca Save finché una qualsiasi riga ha ancora un errore. Deliverable: gestore CellValidating che legge e.FormattedValue e valida le colonne dell'email e dell'età; metodo ValidateRow che imposta l'ErrorText di riga e l'errore sulla cella della data di chiusura per i contatti Closed; gestore CellValidated che cancella gli errori di cella superati; gestore DataError con ThrowException = false, un messaggio comprensibile e un'eccezione registrata nel log; controllo su Save che salta la riga nuova segnaposto e rifiuta di salvare finché una qualsiasi riga ha un errore.
Modulo 7: UX di validazione in produzione, error provider personalizzati e capstone
Modulo 7 di Validazione in Wisej.NET — costruisci form, griglie ed editor con data binding che validano l'input in modo chiaro e non salvano mai dati errati. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sulla pipeline di salvataggio del capstone, supera la verifica delle conoscenze e completa il lab pratico in ValidationClinic.
- LetturaGuida della lezione · 14 min
Mettere insieme tutti i livelli: una pipeline di salvataggio noiosa e ripetibile, un IErrorProvider personalizzato che alimenta un pannello di riepilogo, provider a icona e provider di riepilogo fianco a fianco, dieci regole di UX per la validazione e il capstone ValidationClinic che dimostra dove va ogni verifica. Che cosa significa per uno sviluppatore che conosce le basi di C# e sta iniziando a sviluppare form con Wisej.NET — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoUn solo pulsante Save, tutti i livelli di validazione · 14 min
Un solo pulsante Save, tutti i livelli di validazione — una videoguida del Modulo 7, costruita passo dopo passo in ValidationClinic. Parte direttamente qui nel player.
Trascrizione della narrazione
Porta i controlli ValidationClinic in un unico percorso di salvataggio. La convalida del campo, del modello, dell'azienda e della rete ora deve cooperare in Wisej.NET, quindi un controllo riuscito a un livello non ignora mai un problema irrisolto a un altro.
I validatori corretti individualmente non garantiscono un salvataggio corretto. Una modifica in sospeso potrebbe lasciare il modello obsoleto o un errore della griglia potrebbe non raggiungere mai i controlli del modulo. Metti le fasi in un ordine fisso e richiedi che ogni fase abbia successo.
Reimposta il feedback e completa la modifica corrente prima di controllare i campi, il modello, le regole aziendali e le righe della griglia. Fermati alla prima fase fallita. Questa sequenza impedisce l'esecuzione del lavoro successivo con input non validi e mantiene l'eventuale scrittura dietro tutti i controlli.
Utilizza il contratto IErrorProvider per inviare messaggi senza vincolare la convalida a un display. SummaryErrorProvider conserva un messaggio per ciascun controllo e nasconde la sua etichetta quando non ne rimane nessuno. Il riepilogo può quindi riflettere gli stessi errori del feedback sul campo.
Ritorna in anticipo quando la convalida del campo o del modello fallisce. Se il salvataggio finale ha esito negativo, distingue un nome duplicato che l'utente può correggere da un errore di sistema che non può correggere. Indirizza il duplicato al suo campo e spiega con calma gli altri fallimenti.
Esamina il feedback come parte del flusso di lavoro, non solo come testo di errore. Spiega la correzione vicino al campo e nel riepilogo, conserva Annulla e mantieni tracce tecniche fuori dai messaggi degli utenti. Testare gli input mancanti, non validi, validi e limite.
Innanzitutto, il nome mancante e l'e-mail in formato errato interrompono il salvataggio durante la convalida del campo. Correggi questi campi e riprova. Il modello poi rifiuta l'età di centotrenta anni, mostrando perché il superamento dei controlli sul campo non rende facoltativi i controlli successivi.
La fase della griglia rileva i restanti problemi di posta elettronica e di righe chiuse e il riepilogo li spiega entrambi. Dopo queste correzioni, ogni fase ha esito positivo e il salvataggio viene completato. La conferma finale ora significa che l'intero percorso di convalida è stato superato.
Fornisci il percorso di salvataggio completo con il fornitore di riepilogo e l'assistente di messaggi condiviso. Includere la gestione delle eccezioni che distingue l'input correggibile dagli errori di sistema. Documentare i casi di test in modo che un altro sviluppatore possa riprodurre sia i salvataggi bloccati che le correzioni riuscite.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto ValidationClinic di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 7 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — Capstone: la pipeline di salvataggio completa · 45 min
Obiettivo: Completa il capstone ValidationClinic. Scrivi btnSave_Click come una pipeline fissa: azzera il riepilogo, chiama bindingSource.EndEdit(), fermati se ValidateChildren() fallisce, fermati se la verifica DataAnnotations fallisce, fermati se ContactValidator restituisce errori di business, fermati se la griglia dei contatti ha ancora errori di riga, e solo allora salva dentro un try/catch che trasforma un nome duplicato in un errore di campo e qualsiasi altra eccezione in un messaggio comprensibile. Crea SummaryErrorProvider che implementa IErrorProvider, assegnalo a validation.ErrorProvider e instrada gli errori attraverso un metodo helper SetError che scrive sia nell'ErrorProvider a icona sia nel provider di riepilogo. Testa i casi obbligatorio, non valido, valido e valore limite e scrivi un breve README che spieghi il design della validazione. Deliverable: pipeline di salvataggio che esegue EndEdit, ValidateChildren e le verifiche di modello, di business e della griglia prima di salvare; classe SummaryErrorProvider che implementa SetError e GetError di IErrorProvider; metodo helper SetError che scrive sia nell'ErrorProvider a icona sia nel provider di riepilogo; try/catch attorno al salvataggio che separa l'errore di nome duplicato dagli errori di sistema; README con il design della validazione e i casi di test obbligatorio, non valido, valido e valore limite.