Hay un montón de post muy bueno y las explicaciones de cómo implementar la validación con ASP.NET MVC, y yo prefiero uno de estos:
Sin embargo, realmente me gusta llamar a ActionMethods a través del método jquery $ .ajax. Una de las razones por las que quiero usar $ .ajax es porque habrá muchas vistas parciales cargadas dinámicamente en la página (incluso el formulario para la creación de entidades) a través de llamadas $ .ajax y no puedo simplemente devolver la vista: Perderé todo el contenido cargado dinámicamente.
Para que tenga una mejor visión del problema, publicaré un código simple para explicar cómo me gustaría llamar a las acciones de los controladores y manejar las respuestas en el código jquery del cliente.
Los controladores ActionMethod:
public ActionResult CreateCustomer(string name, string accountNumber)
{
try
{
CustomerService.InsertCustomer(name, accountNumber);
return Json(new ActionInfo()
{
Success = true,
Message = "Customer Is Successfully Created"
});
}
catch (Exception ex)
{
return Json(new ActionInfo()
{
Success = false,
Message = ex.Message
});
}
}
Calling y gastos de envío en el código de cliente:
$.ajax({
type: "POST",
url: $form.attr('action'),// /MyController/CreateCustomer
data: $form.serialize(),
error: HandleUnespectedError,
dataType: "json",
success: function(response) {
if (response.Success)
alert("Success: " + response.Message);
else
alert("Error: " + response.Message);
}});
¿Hay una buena manera de hacer que algunos de estos marcos de validación para trabajar de la manera que necesito? Sé que puedo agregar errores de validación en ActionInfo, y luego manejarlo en el cliente, pero creo que eso ya sería la base de mi validación.
¡Hey thedude! Muchas gracias por el esfuerzo :) Estoy totalmente de acuerdo con usted por la entidad del Cliente para el enlace (quería hacer eso, no sé por qué había puesto el método con parámetros simples) y para el manejo de excepciones con seguridad. Con xVal puedo implementar fácilmente la validación del cliente, y si alguien lo evita lo veré en acción. Pero, ¿cómo presentaría los mensajes de validación junto a los campos en ese caso? –
Para eso, le gustaría devolver una vista parcial en lugar de JSON desde la acción de su controlador. En su vista parcial, usaría el método de ayuda Html.ValidationMessage() para mostrar un mensaje de error para cada campo. Los mensajes de error de nivel de campo que generaron sus atributos de anotaciones de datos están disponibles para su controlador a través de la propiedad 'ModeloEstado'. Por ejemplo, para obtener el primer mensaje de error para un campo llamado name, lo obtendría a través de 'ModelState ['Name']. Errors [0] .ErrorMessage'. Además, eche un vistazo al método 'Ajax.BeginForm'. Lo he usado con gran éxito en el pasado. –
Eso es lo que me di cuenta, o bien devolveré a JSON una vista parcial, y eso es lo que no me gusta ... Sin embargo, voy a echar un vistazo a cómo manejarlo usando MS incorporada en las funciones de Ajax, aunque mi deseo era evitar eso :) Gracias –