2012-01-31 10 views
7

Estoy usando MVC2.Uso de Knockoutjs y Validación del lado del servidor en .NET MVC2

¿Cuál es la forma recomendada de validación del lado del servidor de formularios al utilizar knockout?

Actualmente, la mayoría de mis formularios están en vistas parciales, que tienen un C# ViewModel con atributos de validación. Algo como esto:

public class SomeThingViewModel 
{ 
    [Required] 
    public string Name { get; set; } 

    [Required] 
    public int Number{ get; set; } 
} 

Así que cuando el formulario se envía al servidor, consigo todos los errores en el modelo y que puede devolver el formulario con errores, que se muestran con algo como: <%: Html.ValidationMessageFor(m => m.Name)%>. Esto se vuelve a cargar en el elemento que contiene el formulario en la página principal para que el usuario pueda ver los errores. Esto mataría todas las ataduras que tenía con la forma en el golpe de gracia que asumiría.

No estoy realmente seguro de cómo hacerlo usando el knockout.

+0

Sería genial escuchar cualquier posible solución que haya optado por su proyecto a la forma de controlar la validación del lado del servidor con knockoutjs en el cliente. Por favor, comparta ya sea como respuesta a continuación o como comentario. ¡Estoy muy confundido! –

Respuesta

4

Esto puede ser complicado, pero hecho bien funciona como una brisa.

Primero, sincronice sus modelos de vista. Lo que tiene en el lado del cliente en knockout pasa exactamente al servidor. En segundo lugar, no hace HTML del lado del servidor con knockout. Cree campos que estén configurados en el lado del servidor y leídos en el lado del cliente que indiquen la validez de cada campo de datos en su ViewModel.

Así que si su modelo tiene un campo Name, su modelo de vista tiene Name y Name_ValidationResult, que es una enumeración que indica si el campo Nombre es válido y qué no lo es. Si falla la validación del lado del servidor, establezca los campos de resultados de validación y vuelva a pasar todo el modelo de vista del servidor al cliente para que se vuelva a establecer como el modelo de vista del lado del cliente una vez que se complete la solicitud. Básicamente, usted vuelve a crear la parte ViewState de ASP.NET, pero hacerlo en un formato que funcionará con Knockout.js

En el lado del cliente, tiene mensajes de error que solo se muestran en función de los valores del ValidationResult campos. Por lo tanto, es posible que tenga un mensaje de error enlatado que indica "El campo Nombre debe estar configurado" que solo se muestra si Name_ValidationResult tiene el valor "Vacío" (por ejemplo).

Básicamente, realmente usa el patrón MVVM con un ajuste menor para tener en cuenta que tiene que hacer un viaje de ida y vuelta al servidor.

Así que está sugiriendo que añada campos ValidationResult en mi C# ViewModel para cada propiedad. Luego configure las Propiedades de ValidationResult en mi controlador cuando verifico la validez del Modelo. ¿Entonces, devuelve el modelo de vista como JSON? para que pueda actualizar mi modelo de vista knockout. Esto requerirá que valide manualmente hasta cierto punto, ¿verdad? ¿O puedo aprovechar los errores de ModelState con los que terminaré? - Blankasaurus

La línea inferior es sí a todas sus preguntas.

En verdad, eché de menos el hecho de que estaba usando DataAnnotaciones para su validación, o lo habría mencionado. Debería poder aprovechar los errores de ModelState para establecer los resultados de su validación y devolverlos a su página de eliminación directa.

El problema es que estás usando dos tecnologías fundamentalmente incompatibles y esperando que funcionen bien juntas, y no creo que vaya a funcionar de la manera que esperas.Algo va a tener que dar, y sugiero que el mejor punto para eso es del lado del servidor. Bebe el refresco genial y arregla lo que tienes que hacer en el lado del servidor.

+0

Así que está sugiriendo que añada campos de ValidationResult en mi C# ViewModel para cada propiedad. Luego configure las Propiedades de ValidationResult en mi controlador cuando verifico la validez del Modelo. ¿Entonces, devuelve el modelo de vista como JSON? para que pueda actualizar mi modelo de vista knockout. Esto requerirá que valide manualmente hasta cierto punto, ¿verdad? ¿O puedo aprovechar los errores de ModelState con los que terminaré? – Jason

+1

+1 Solución interesante –

+0

Quizás llegue un poco tarde a la fiesta, pero estoy un poco confundido. ¿Estás diciendo que él/nosotros deberíamos rechazar la validación del lado del servidor y hacer la validación por nocaut? ¿No es arriesgado? ¿O te malentendí? ^^ – Pharao2k

Cuestiones relacionadas