ASP.NET MVC AJAX con HTML.ValidationMessageFor

Estoy acostumbrado a la forma sencilla de hacer formularios AJAX de ASP.NET con UpdatePanels. Entiendo que el proceso es mucho más artesanal con MVC.

En un caso específico, estoy usando Anotaciones de datos para validar algunas entradas de formulario. Uso el ayudante HTML.ValidationMessageFor para mostrar un mensaje de error. Si quiero usar AJAX para publicar este formulario y mostrar este mensaje de error, ¿cuál sería el proceso? ¿Es posible mantener el HTML.ValidationMessageFor y hacer que funcione con AJAX?

Gracias.

Este artículo podría ser útil: el blog de ScottGu: ASP.NET MVC 2: Validación del modelo .

La validación utilizada en MVC puede ser tanto del lado del cliente como del servidor. Para habilitar la validación del lado del cliente use el:

<% Html.EnableClientValidation(); %> 

statement en algún lugar en su opinión. Esto niega la necesidad de utilizar AJAX para publicar su formulario en el servidor y luego mostrar los resultados en línea, ya que los usuarios con javascript habilitado tendrán su propia validación en el lado del cliente.

¿Está utilizando los métodos AJAX incorporados? Por ejemplo, ¿creó el formulario AJAX con Ajax.BeginForm(...) ? Si es así, es muy fácil mostrar mensajes de validación.

Una cosa más: ¿desea mostrar un mensaje de validación para cada control incorrecto individual , o simplemente desea tener un resumen de validación sobre su formulario? Estoy bastante seguro de que está preguntando si desea mostrar un mensaje individual para cada control, pero incluiré ambos por si acaso.


Para mostrar un mensaje individual para cada control incorrecto:

Primero, debe colocar las entradas de su formulario dentro de una Vista parcial . Llamaré a eso Partial View RegisterForm.ascx .

A continuación, debes tener algo como esto en tu vista :

 <% using (Ajax.BeginForm("MyAction", null, new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "myForm" }, new { id = "myForm" })) { %> <% Html.RenderPartial("RegisterForm"); %> <% } %> 

Finalmente, la acción de tu controlador debería tener un aspecto similar al siguiente:

 [AcceptVerbs(HttpVerbs.Post)] public ActionResult MyAction(CustomViewModel m) { if(!m.IsValid) //data validation failed { if (Request.IsAjaxRequest()) //was this request an AJAX request? { return PartialView("RegisterForm"); //if it was AJAX, we only return RegisterForm.ascx. } else { return View(); } } } 

Para mostrar solo un resumen de validación sobre su formulario:

Primero debe crear una vista parcial de ValidationSummary separada . Así es como debería verse el código de ValidationSummary.ascx :

 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> <%= Html.ValidationSummary("Form submission was unsuccessful. Please correct the errors and try again.") %> 

A continuación, dentro de tu vista , deberías tener algo como esto:

 
<% Html.RenderPartial("ValidationSummary"); %>
<% using (Ajax.BeginForm("MyAction", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "validationSummary" })) { %> <% } %>

Finalmente, la acción de tu controlador debe parecerse a esto:

 [AcceptVerbs(HttpVerbs.Post)] public ActionResult MyAction(CustomViewModel m) { if(!m.IsValid) //data validation failed { if (Request.IsAjaxRequest()) //was this request an AJAX request? { return PartialView("ValidationSummary"); //if it was AJAX, we only return the validation errors. } else { return View(); } } } 

¡Espero que ayude!