2009-04-29 12 views
0

J'ai un formulaire qui recueille une donnée en utilisant ASP.NET MVC. Il ressemble à ceci:Formulaires Ajax dans ASP.NET MVC

 

[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 asp.net mvc et validation de validation état de modèle pour prendre soin des messages de règles invalides affiché. Tout fonctionne.

Maintenant, je veux soumettre l'action, en utilisant un formulaire ajax, et afficher un message de réussite lorsque l'action est terminée avec succès. J'ai essayé d'utiliser le code ci-dessous, et cela fonctionne quand l'opération réussit, mais quand elle échoue (le modèle a des erreurs), toute la page est rendue à nouveau dans le 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); 
} 
 

Répondre

2

Votre problème est la dernière ligne renvoyant 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"); 
}