2012-05-25 8 views
7

Estoy experimentando con diferentes frameworks MVC del lado del cliente en este momento (principalmente Backbone y Knockout). Estoy tratando de encontrar una forma de validar. Tengo MVC 4 Web API que solo devuelve datos. Toda la lógica del motor de vista está en el lado del cliente. Obviamente, entiendo que la validación del lado del servidor es imprescindible. Esto lo logro con DataAnnotations y la validación estándar de ASP.NET MVC mediante el enlace del modelo.Frameworks MVC del lado del cliente (Backbone, Knockout, etc.) y validación

Sin embargo, terminé con la duplicación de toda la lógica de validación ahora en el lado del cliente también. ¿Hay alguna forma de devolver datos pero con una lógica de validación adjunta?

Respuesta

2

No,

Al dar datos al Serer es necesario utilizar el protocolo HTTP va a utilizar un método POST o GET. esto solo puede pasar pares de valores clave. Al utilizar la vinculación de datos MVC, puede vincular estos pares de valores clave para crear objetos complejos.

Sin embargo, no hay forma de transferir metadatos o funciones a C# para completar la validación. Toda la lógica de validación debe escribirse tanto en el servidor como en un lenguaje de scripting del lado del cliente para proporcionar la validación adecuada

5

Blast-Dan es parcialmente correcto, lo que significa que no puede pasar datos extra a su servidor del cliente aparte de Key -Value pares.

Lo que puede hacer, sin embargo, es propagar sus Anotaciones de Datos al cliente para que no sea necesario reescribir algún código de validación. No es trivial para reglas complejas, pero los helpers Html.EditorFor te ayudarán a generar cuadros de texto para entrada con atributos de validación adjuntos que se recogen sin problemas mediante la validación de jquery y detienen el envío del formulario. Estoy pensando en [Obligatorio], [Rango()] y [RegularExpresión()] Anotaciones de datos por nombrar algunos.

Puede ver un ejemplo rápido si solo crea un modelo normal y luego agrega el Controlador en Visual Studio usando el asistente para crear las Vistas para las operaciones CRUD. Verá cómo las anotaciones de datos que utilizó en la clase de modelo terminan siendo procesadas en el html de salida.

Si está creando el HTML usted mismo sin HtmlHelper (que creo que puede estar haciendo con la etiqueta knockout) es posible que desee comprobar el DataAnnotationsModelValidatorProvider y la interfaz IClientValidatable comenzando en this link.

Como se puede ver, esto sigue siendo desconocido aunque territorio:/

+0

Más acerca de cómo se logra esto usando javascript discreta se puede encontrar en el blog de Brad Wilson [aquí para la validación] (http: //bradwilson.typepad. com/blog/2010/10/mvc3-unobtrusive-validation.html) y [aquí para ver eventos] (http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-ajax.html) – leon

+0

Gracias por la respuesta. Sin embargo, estoy trabajando con el escenario donde el servidor solo devuelve datos JSON. No existe lógica de motor de vista en el lado del servidor. Estaba considerando usar un motor de vista lateral del cliente (barras de control, bigote, etc.). –

+0

por lo general para validaciones simples (campos obligatorios, tipos de datos, etc.) uso algo como el complemento de validación jquery; desafortunadamente, esos tienen que ser recreados en el navegador, pero lo encontrarás bastante fácil, ya que no tienes que lidiar con todo ese hooha discreto. Para la validación compleja, normalmente hago las del servidor y proporciono retroalimentación en una respuesta json y la visualizo en mi plantilla, y/o uso la eliminación de validación en el mismo complemento. De acuerdo, las anotaciones de datos son la forma de ir por el lado del servidor. – drogon

Cuestiones relacionadas