Domanda

Sto cercando di capire il modo migliore per convalidare i dati all'interno di un'app MVC C# e xVal sembrava essere la soluzione migliore.Tuttavia sto riscontrando un problema con la convalida del tipo di dati.

All'inizio stavo eseguendo un UpdateModel nel DTO e quindi eseguendo la convalida sul DTO.Ha funzionato benissimo per cose come i campi obbligatori, tuttavia UpdateModel genererebbe un'eccezione se provassi, ad esempio, a mappare una stringa ("asd") in un campo decimale.Poiché UpdateModel doveva essere eseguito prima che ci fossero dati da convalidare, non ero sicuro di come aggirare il problema.

La mia soluzione era creare un DTO per modulo in cui UpdateModel avrebbe copiato, eseguito la convalida su quello e quindi copiare i valori nei DTO appropriati.Tutti gli attributi sul modulo DTO sarebbero stringhe, quindi UpdateModel non fallisce mai e applicherei la convalida dei dati tramite xVal.Tuttavia, mentre le regole come obbligatorie stanno entrando in vigore, non riesco a far entrare in azione la regola DataType (in questo caso provando DataType.Currency).

Avevo anche provato a far funzionare la convalida lato client, ma speravo che ci fosse un modo pulito per eseguire la convalida lato server dei tipi di dati.

Cosa hanno fatto gli altri per quanto riguarda la convalida dei tipi di dati sul lato server?

È stato utile?

Soluzione

Quello che ho finito per fare è stato la creazione di alcuni DTOs che rappresentano le forme. Questi DTOs avrebbe preso un Request.Form e automaticamente mappare tutti i valori della forma nelle proprietà interne (e-mail ex public string, nome public string) basati su di essi di essere lo stesso nome dei valori della forma.

Avrebbero tutte le proprietà di stringa e mi piacerebbe mettere gli attributi xVal su di loro. Mi piacerebbe quindi utilizzare xVal e le espressioni regolari per assicurarsi che i dati provenienti era valido (es una valida attività di, email, numero, ecc). In questo modo non ci sarebbe mai stata un'eccezione gettata perché stava andando sempre in una stringa, al contrario di .Net cercando di analizzarlo in una data o qualcosa del genere.

Questo avrebbe fatto in modo che i dati sempre reso al xVal dove ho potuto eseguire la convalida che voglio, e poi convertirlo nel tipo corretto come DateTime volta So di avere dati validi.

Altri suggerimenti

Sto utilizzando validatori personalizzati derivati ​​da ValidationAttribute per convalidare i dati che dovrebbero essere analizzati sul lato server dalla stringa ad altri tipi di dati.Per esempio:

public class DateAttribute : ValidationAttribute
    {

        public override bool IsValid(object value)
        {
            var date = (string)value;
            DateTime result;
            return DateTime.TryParse(date, out result);
        }
    }

Ho anche trovato un modo per trasformare tali attributi di convalida in attributi di convalida lato client e lato server senza scrivere alcun codice JavaScript personalizzato.Devo solo derivare da una diversa classe base dell'attributo di convalida.Dai un'occhiata al mio articolo di blog sulla convalida lato client se vuoi saperne di più su questo.

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