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.
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! –