ASP.NET MVC AJAX avec HTML.ValidationMessageFor

Je suis habitué à la façon simple d’utiliser Web Forms ASP.NET pour effectuer AJAX avec UpdatePanels. Je comprends que le processus est beaucoup plus artisanal avec MVC.

Dans un cas spécifique, j’utilise des annotations de données pour valider certaines entrées de formulaire. J’utilise l’assistant HTML.ValidationMessageFor pour afficher un message d’erreur. Si je veux utiliser AJAX pour publier ce formulaire et afficher ce message d’erreur, quel serait le processus? Est-il possible de conserver HTML.ValidationMessageFor et de le faire fonctionner avec AJAX?

Je vous remercie.

Cet article pourrait être utile: Blog de ScottGu: ASP.NET MVC 2: Validation de modèle .

La validation utilisée dans MVC peut être à la fois côté client et côté serveur. Pour activer la validation côté client, utilisez:

<% Html.EnableClientValidation(); %> 

déclaration quelque part dans votre vue. Cela évite d’avoir à utiliser AJAX pour publier votre formulaire sur le serveur, puis afficher les résultats en ligne, car les utilisateurs avec javascript activé auront leur propre validation côté client.

Utilisez-vous les méthodes AJAX intégrées? Par exemple, avez-vous créé le formulaire AJAX avec Ajax.BeginForm(...) ? Si c’est le cas, il est très facile d’afficher les messages de validation.

Une dernière chose: souhaitez-vous afficher un message de validation pour chaque contrôle incorrect individuel ou souhaitez-vous simplement disposer d’un résumé de validation au-dessus de votre formulaire? Je suis sûr que vous demandez l’affichage d’un message individuel pour chaque contrôle, mais je vais inclure les deux au cas où.


Pour afficher un message individuel pour chaque contrôle incorrect:

Tout d’abord, vous devez placer vos entrées de formulaire dans une vue partielle . J’appellerai cette vue partielle RegisterForm.ascx .

Ensuite, vous devriez avoir quelque chose comme ça à votre avis :

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

Enfin, votre action de contrôleur devrait ressembler à ceci:

 [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(); } } } 

Pour afficher uniquement un résumé de validation au-dessus de votre formulaire:

Vous devez d’abord créer une vue partielle distincte de ValidationSummary . Voici à quoi devrait ressembler le code de ValidationSummary.ascx :

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

Ensuite, dans votre vue , vous devriez avoir quelque chose comme ceci:

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

Enfin, votre action de contrôleur devrait ressembler à ceci:

 [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(); } } } 

J’espère que cela pourra aider!