Para aplicar correctamente el envío de formularios ajax, deberá modificar la acción Registrar y las vistas. De forma predeterminada, en caso de error, esta acción simplemente devuelve la vista register.aspx asociada. El primer paso sería poner el resumen de validación dentro de un control parcial del usuario:
ValidationSummary.ascx:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%= Html.ValidationSummary("Account creation was unsuccessful. Please correct the errors and try again.") %>
A continuación, se incluye este parcial dentro de la vista register.aspx:
<div id="validationSummary">
<% Html.RenderPartial("ValidationSummary"); %>
</div>
<% using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "validationSummary" })) { %>
FORM CODE HERE
<% } %>
Y finalmente modifica la acción Registrar:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(string userName, string email, string password, string confirmPassword)
{
// ... skipped content for clarity
// If we got this far, something failed, redisplay form
if (Request.IsAjaxRequest())
{
// If an ajax request was made return only the validation errors
// instead of the whole page
return PartialView("ValidationSummary");
}
else
{
return View();
}
}
En caso de que el registro tiene éxito de forma predeterminada. La acción Registrar simplemente redirige a Inicio/Índice. También deberá modificar este bit porque, al realizar una solicitud ajax, la redirección no funcionará. De la misma manera que podría probar si está invocando la acción de forma asíncrona y devolver algún texto que indique que el registro fue exitoso. Este texto se mostrará dentro del mismo div
como los errores de validación.
ACTUALIZACIÓN:
Una última pregunta - En lugar de la lista bala de mensajes de error, ¿cómo me sale cada mensaje de error controles para render junto al control mediante el HTML. Método ValidationMessage ("....") ?
Con el fin de lograr esto es necesario para poner el contenido de su forma dentro de una visión parcial:
<% using (Ajax.BeginForm(
"register",
null,
new AjaxOptions {
HttpMethod = "POST",
UpdateTargetId = "myForm"
},
new {
id = "myForm"
})) { %>
<% Html.RenderPartial("RegisterForm"); %>
<% } %>
Y en su acción de registro render la correcta parcial:
if (Request.IsAjaxRequest())
{
return PartialView("RegisterForm");
}
else
{
return View();
}