Formulaires Ajax dans ASP.NET MVC
-
03-07-2019 - |
Question
J'ai un formulaire qui collecte des données à l'aide d'ASP.NET MVC. Cela ressemble à ceci:
[AcceptVerbs(HttpVerbs.Post)]
[AutoValidate]
public ActionResult Contact(ContactMessage msg)
{
if(ModelState.IsValid)
{
try
{
this.messengerService.SendMail(msg);
RedirectToAction("Index");
}
catch (Exception ex)
{
ModelState.AddUnhandledError(ex);
}
}
return View(msg);
}
J'utilise les validations asp.net mvc et la validation de l'état du modèle pour gérer les messages de règle non valides affichés. Tout fonctionne.
Je souhaite maintenant soumettre l'action à l'aide d'un formulaire ajax et afficher un message de réussite une fois l'action terminée. J'ai essayé d'utiliser le code ci-dessous, et cela fonctionne lorsque l'opération réussit, mais lorsqu'il échoue (le modèle contient des erreurs), la page entière est rendue à nouveau dans la DIV qui affiche le message de réussite! Est-ce possible?
[AcceptVerbs(HttpVerbs.Post)]
[AutoValidate]
public ActionResult Contact(ContactMessage msg)
{
if(ModelState.IsValid)
{
try
{
this.messengerService.SendMail(msg);
return Content("Message sent");
}
catch (Exception ex)
{
ModelState.AddUnhandledError(ex);
}
}
return View(msg);
}
La solution
Votre problème est la dernière ligne qui renvoie la vue normale.
Essayez ceci:
[AcceptVerbs(HttpVerbs.Post)]
[AutoValidate]
public JsonResult Contact(ContactMessage msg)
{
if(ModelState.IsValid)
{
try
{
this.messengerService.SendMail(msg);
return Json("Message sent");
}
catch (Exception ex)
{
ModelState.AddUnhandledError(ex);
}
}
return Json("There were model errors");
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow