Pergunta

Eu estou tentando descobrir a melhor forma de validar os dados dentro de um MVC, C# app e xVal parecia ser a melhor ajuste.No entanto, eu tenho um problema com o tipo de dados de validação.

No começo eu estava fazendo um UpdateModel para o DTO e, em seguida, executar a validação do DTO.Isso funcionou muito bem para coisas como campos obrigatórios, no entanto UpdateModel iria lançar uma exceção se você tentou, por exemplo, para mapear uma seqüência de caracteres ("cia") para um campo decimal.Desde UpdateModel tinha que ser executado antes de haver qualquer dados para validar eu não tinha certeza de como contornar isso.

Minha solução foi criar um DTO por forma que UpdateModel iria copiar, executar a validação de que, e, em seguida, copiar os valores para o adequado DTOs.Todos os atributos no formulário DTO seria cadeias de caracteres para UpdateModel nunca bombas, e eu gostaria de fazer cumprir a validação de dados através de xVal.No entanto, enquanto regras como necessárias estão chutando, eu não consigo ficar em um Tipo de regra para chutar (neste caso, a tentativa de Tipo de dados.Moeda).

Eu também tinha tentado obter a validação do lado do cliente para o trabalho, mas eu estava esperando havia uma maneira simples para fazer a validação do lado do servidor de tipos de dados.

O que têm os outros feito com relação à validação de tipos de dados no lado do servidor?

Foi útil?

Solução

O que acabei fazendo foi criar alguns DTOs que representam os formulários. Esses DTOs aceitariam uma solicitação.Form e mapeariam automaticamente todos os valores de formulário nas propriedades internas (ex public string email, public string primeironame) com base em que eles são o mesmo nome que os valores do formulário.

Eles teriam todas as propriedades da string e eu colocaria os atributos XVAL neles. Eu usaria expressões XVAL e regulares para garantir que os dados que chegassem fossem válidos (ex uma data válida, email, número, etc.). Dessa forma, nunca haveria uma exceção jogada porque estava sempre entrando em uma corda, em oposição ao .Net tentando analisá -lo em uma data ou algo assim.

Isso garantiria que os dados sempre chegassem ao XVAL onde eu poderia executar a validação que eu quero e então Converta -o para o tipo adequado, como o DateTime, uma vez que eu sei que tenho dados válidos.

Outras dicas

Eu estou usando validadores personalizados derivados de ValidationAttribute para validação de dados que devem ser analisados no lado do servidor a partir de seqüência de caracteres para outros tipos de dados.Por exemplo:

public class DateAttribute : ValidationAttribute
    {

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

Eu também encontrei uma maneira de transformar tais validação de atributos no lado do cliente E do lado do servidor de validação de atributos, sem escrever nenhum código javascript personalizado.Eu só tenho que derivam de diferentes validação atributo da classe base.Dê uma olhada no meu artigo do blog sobre a validação do lado do cliente se você gostaria de saber mais sobre isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top