Pour appliquer avec succès une soumission de formulaire ajax, vous devez modifier l'action Enregistrer et les vues. Par défaut, en cas d'erreur, cette action renvoie simplement la vue register.aspx associée. La première étape serait de mettre le résumé de validation dans un contrôle utilisateur partiel:
ValidationSummary.ascx:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%= Html.ValidationSummary("Account creation was unsuccessful. Please correct the errors and try again.") %>
Ensuite, vous inclure cette partie dans la vue Register.aspx:
<div id="validationSummary">
<% Html.RenderPartial("ValidationSummary"); %>
</div>
<% using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "validationSummary" })) { %>
FORM CODE HERE
<% } %>
Et enfin vous modifiez l'action Enregistrer:
[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 cas d'enregistrement réussit par défaut l'action Register vient de rediriger vers Home/Index. Vous devrez également modifier ce bit, car lorsque vous effectuez une requête ajax, la redirection ne fonctionnera pas. De la même manière, vous pouvez tester si vous appelez l'action de manière asynchrone et renvoyez du texte indiquant que l'enregistrement a réussi. Ce texte sera affiché à l'intérieur du même div
que les erreurs de validation.
MISE À JOUR:
Une dernière question - Au lieu de la liste bullet des messages d'erreur, comment faire j'obtenir le rendu de chaque message d'erreur de contrôles à à côté du contrôle à l'aide du Html. ValidationMessage ("....") méthode ?
Pour ce faire, vous avez besoin de mettre le contenu de votre formulaire dans une vue partielle:
<% using (Ajax.BeginForm(
"register",
null,
new AjaxOptions {
HttpMethod = "POST",
UpdateTargetId = "myForm"
},
new {
id = "myForm"
})) { %>
<% Html.RenderPartial("RegisterForm"); %>
<% } %>
Et dans votre action de registre rendu correct partiel:
if (Request.IsAjaxRequest())
{
return PartialView("RegisterForm");
}
else
{
return View();
}