Tengo un modelo con 4 propiedades que son de tipo cadena. Sé que puede validar la longitud de una sola propiedad utilizando la anotación StringLength. Sin embargo, quiero validar la longitud de las 4 propiedades combinadas.
¿Cuál es la forma MVC de hacer esto con la anotación de datos?
Pregunto esto porque soy nuevo en MVC y quiero hacerlo de la manera correcta antes de crear mi propia solución.
c#
.net
asp.net-mvc
asp.net-mvc-3
data-annotations
Danny van der Kraan
fuente
fuente
Respuestas:
Podría escribir un atributo de validación personalizado:
y luego puede tener un modelo de vista y decorar una de sus propiedades con él:
fuente
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");
. Ahora mire el código en mi respuesta que necesita escribir con las anotaciones de datos y dígame cuál prefiere. El modelo de validación declarativa es muy deficiente en comparación con un modelo imperativo.IsValid
se llamavalidationContext
es nulo. ¿Alguna idea de lo que hice mal? :-(Modelo auto validado
Su modelo debe implementar una interfaz
IValidatableObject
. Pon tu código de validación en elValidate
método:Tenga en cuenta: esta es una validación del lado del servidor . No funciona del lado del cliente. Su validación se realizará solo después del envío del formulario.
fuente
ExpressiveAnnotations le brinda esa posibilidad:
fuente
Para mejorar la respuesta de Darin, puede ser un poco más corto:
Modelo:
Tenga en cuenta que se requiere un mensaje de error; de lo contrario, el error estará vacío.
fuente
Antecedentes:
Las validaciones de modelos son necesarias para garantizar que los datos recibidos que recibimos sean válidos y correctos para que podamos realizar el procesamiento posterior con estos datos. Podemos validar un modelo en un método de acción. Los atributos de validación integrados son Compare, Range, RegularExpression, Required, StringLength. Sin embargo, es posible que tengamos escenarios en los que requiramos atributos de validación distintos de los integrados.
Atributos de validación personalizados
Para crear un atributo de validación personalizado, tendrá que derivar esta clase de ValidationAttribute.
Espero que esto ayude. Salud !
Referencias
fuente
Un poco tarde para responder, pero para quién está buscando. Puede hacer esto fácilmente usando una propiedad adicional con la anotación de datos:
Eso es todo lo que es demasiado. Si realmente desea mostrar en un lugar específico el error de validación también, puede agregar esto en su vista:
hacer esto en la vista puede resultar útil si desea realizar la localización.
¡Espero que esto ayude!
fuente