Ferme la fenêtre modale contenant le formulaire ASP MVC Ajax

dans une application Web, j’utilise un formulaire ASP MVC Ajax dans une fenêtre modale. Je n’utilise aucun code jQuery spécifique, seulement quelques-uns pour ouvrir la fenêtre modale (c’est-à-dire la fonction showModal ()):

@Ajax.ActionLink("Open", "Add", "Home", new {id = Model.Id}, new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "modal", OnSuccess = "showModal()"}) 

Ce code charge mon formulaire (vue partielle) dans un div et l’ouvre en tant que fenêtre modale. Dans le formulaire submit ActionResult, je viens d’utiliser l’object ModelState par défaut pour le valider et, en cas d’erreur, je renvoie la même vue partielle contenant les erreurs de modèle. Cela fonctionne correctement, sauf dans la situation suivante: lorsque le modèle ne contient aucune erreur, je souhaite fermer automatiquement la fenêtre modale. J’ai essayé ce qui suit:

 @using (Ajax.BeginForm("Save", "Home", new AjaxOptions {HttpMethod = "POST", UpdateTargetId = "modal", OnSuccess = "hideModal(); alert('Saved');"})) 

Cependant, lorsque le modèle contient des erreurs, l’appel Ajax est toujours valide et OnSuccess sera donc appelé. J’ai essayé de résoudre ce problème en envoyant une erreur HttpStatusCode dans la vue partielle, mais la div n’est pas mise à jour avec le nouveau code HTML. Je pense que la seule solution consiste à envoyer une vue partielle contenant du code javascript qui ferme la fenêtre modale lorsque le modèle ne contient aucune erreur, mais cette solution n’est pas très nette à mon avis. D’autres idées?

Je devais juste faire la même chose aujourd’hui. La solution que j’ai proposée consistait à renvoyer un JsonResult avec une propriété définie sur true lorsque l’action a réussi. Dans le rappel OnSuccess de AjaxOptions, j’ai vérifié la propriété et fermé ma fenêtre modale.

Méthode du contrôleur

 [HttpPost] public ActionResult Hold(JobStatusNoteViewModel model) { if (ModelState.IsValid) { //do work return Json(new {success = true}); } return PartialView("JobStatusNote", model); } 

Vue partielle

 <% using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "JobStatusForm", OnSuccess = "closePopUp" })) { %> 
<% } %>