2009-04-29 19 views
0

Ich habe ein Formular, das Daten mit ASP.NET MVC sammelt. Es sieht wie folgt aus:Ajax-Formulare in 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); 
} 
 

ich asp.net bin mit mvc Validierungen und Modellstatusüberprüfung Pflege der ungültige Regel Nachrichten zu übernehmen angezeigt. Es funktioniert alles.

Jetzt möchte ich die Aktion mit dem Ajax-Formular senden und eine Erfolgsmeldung anzeigen, wenn die Aktion erfolgreich abgeschlossen wurde. Ich habe versucht, den folgenden Code zu verwenden, und es funktioniert, wenn der Vorgang erfolgreich ist, aber wenn es fehlschlägt (Modell hat Fehler), wird die gesamte Seite erneut im DIV gerendert, die Erfolgsmeldung anzeigt! Ist das möglich?

 

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

Antwort

2

Ihr Problem ist die letzte Zeile, die die normale Ansicht zurückgibt.

Versuchen Sie folgendes:

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