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

Était-ce utile?

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
scroll top