2011-01-20 17 views
32

Con MVC3 tiene dos nuevos mecanismos para agregar validación personalizada. Estos son (1) subclase ValidationAttribute o (2) implementa IValidatableObject.IValidatableObject en MVC3 - validación del lado del cliente

ValidationAttribute le permite agregar la validación del lado del cliente de manera relativamente simple al implementar IClientValidatable (y registrar un nuevo adaptador y método a través de jQuery).

IValidatableObject es más adecuado para los requisitos de validación puntuales donde la reutilización no es una opción. También da como resultado un código ligeramente más simple. Por lo tanto, sería mi elección para una serie de escenarios. Desafortunadamente, no veo una manera fácil de implementar la validación del lado del cliente usando este método.

Entonces, la pregunta es ¿qué es lo que me falta y cómo se obtiene la validación de JS cuando se usa IValidatableObject?

Respuesta

23

Como no recibí una respuesta (válida) aquí, pregunté a un par de personas de Microsoft y me confirmaron que no era posible.

Brad Wilson:

En este momento, sólo el nivel validadores propiedad puede emitir el lado del cliente validación (como que se alinea mucho mejor con la idea de validación de entrada en la forma del navegador .. . no existe un "modelo" para hablar de, desde el punto de vista del navegador).

Stuart puerros:

no creo que pueda conectar con la validación del cliente IValidatableObject

+0

¿Esto significa que no hay una manera fácil de enganchar una validación de JavaScript personalizada en la vista? Me gustaría tener una función simple que pueda conectar al mecanismo de validación existente del lado del cliente. – pauloya

+0

[Publicación de un foro de ASP.NET] (http://forums.asp.net/post/5593598.aspx): * la validación de jquery actualmente solo valida los campos de entrada (sin validación de nivel de modelo), por lo que no existe un mapeo natural para la clase nivel de validación Una forma común de agregar la validación de nivel de modelo es agregar un campo oculto y asignar la validación de nivel de modelo a lo oculto. * Http://stackoverflow.com/a/5817958/11683 demuestra este enfoque, con la excepción de que el campo no está oculto. . – GSerg

+0

Usar un atributo [Remoto] en el modelo podría ayudar; lea más aquí: http://msdn.microsoft.com/en-us/library/gg508808%28VS.98%29.aspx – Tohid

4

http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx http://blogs.msdn.com/b/stuartleeks/archive/2010/07/28/asp-net-mvc-adding-client-side-validation-to-validatepasswordlengthattribute-in-asp- net-mvc-3-preview-1.aspx

ASP.NET MVC 3 ahora rinde homenaje a la interfaz IValidateObject cuando el modelo vinculante (además de todos los otros validación se acerca ya apoyado con MVC 2), y recuperarán errores de validación de él y marcarán/resaltarán automáticamente los campos impactados con en una vista usando el ayudantes de formulario HTML integrados.

ASP.NET MVC 3 también introduce una nueva interfaz de IClientValidatable que permite ASP.NET MVC para descubrir al tiempo de ejecución si un validador tiene soporte para la validación del cliente. Esta interfaz se ha diseñado para que se pueda integrar con una variedad de marcos de validación . MVC 3 también presenta una nueva interfaz IMetadataAware que simplifica cómo puede contribuir al proceso de creación ModelMetadata .

+2

Todo esto está relacionado con la adición de validación del lado del cliente para validación de atributos que como he dicho en mi pregunta, funciona muy bien. Estoy preguntando acerca de agregar validación del lado del cliente a IValidatableObject. –

0

Este article describe una forma de acceder al objeto contenedor en la validación del lado del cliente en ASP.NET MVC. Puede usarlo para comenzar a usar su propia validación del cliente

+1

Nuevamente, esto está relacionado con las anotaciones de datos y es específico de MVC2. Existe un mecanismo completamente diferente para agregar la validación del lado del cliente para la validación basada en atributos en MVC3 (IClientValidatable) que es mucho más fácil de implementar que el anterior enfoque DataAnnotationsModelValidator . SIN EMBARGO, no estoy hablando de atributos, estoy hablando de la otra forma MVC3 de validación: IValidatableObject. –

+0

@PaulHiles - Hola Paul, ¿Encontraste algo adecuado para la validación del lado del cliente en mvc? –

Cuestiones relacionadas