Eu tenho um modelo com 4 propriedades que são do tipo string. Eu sei que você pode validar o comprimento de uma única propriedade usando a anotação StringLength. No entanto, quero validar o comprimento das 4 propriedades combinadas.
Qual é a maneira MVC de fazer isso com anotação de dados?
Estou perguntando isso porque sou novo no MVC e quero fazer isso da maneira correta antes de fazer minha própria solução.
c#
.net
asp.net-mvc
asp.net-mvc-3
data-annotations
Danny van der Kraan
fonte
fonte
Respostas:
Você pode escrever um atributo de validação personalizado:
e então você pode ter um modelo de visualização e decorar uma de suas propriedades com ele:
fonte
this.RuleFor(x => x.Foo).Must((x, foo) => x.Foo.Length + x.Bar.Length + x.Baz.Length < 20).WithMessage("The combined minimum length of the Foo, Bar and Baz properties should be longer than 20");
. Agora olhe para o código em minha resposta que você precisa escrever com as anotações de dados e me diga qual você prefere. O modelo de validação declarativa é muito pobre em comparação com um modelo imperativo.IsValid
é chamado devalidationContext
é nulo. Alguma ideia do que fiz de errado? :-(Modelo auto-validado
Seu modelo deve implementar uma interface
IValidatableObject
. Coloque seu código de validação noValidate
método:Observe: esta é uma validação do lado do servidor . Não funciona no lado do cliente. Sua validação será realizada somente após o envio do formulário.
fonte
ExpressiveAnnotations oferece essa possibilidade:
fonte
Para melhorar a resposta de Darin, pode ser um pouco mais curta:
Modelo:
Observe que uma mensagem de erro é necessária, caso contrário, o erro estará vazio.
fonte
Fundo:
As validações de modelo são necessárias para garantir que os dados recebidos que recebemos são válidos e corretos para que possamos fazer o processamento posterior com esses dados. Podemos validar um modelo em um método de ação. Os atributos de validação integrados são Compare, Range, RegularExpression, Required, StringLength. No entanto, podemos ter cenários em que exigimos atributos de validação além dos integrados.
Atributos de validação personalizados
Para criar um atributo de validação personalizado, você terá que derivar essa classe de ValidationAttribute.
Espero que isto ajude. Felicidades !
Referências
fonte
Um pouco tarde para responder, mas para quem está procurando. Você pode fazer isso facilmente usando uma propriedade extra com a anotação de dados:
Isso é tudo o que é realmente. Se você realmente deseja exibir em um local específico o erro de validação também, você pode adicionar isto em sua visualização:
fazer isso na visualização pode ser útil se você quiser fazer a localização.
Espero que isto ajude!
fonte