2013-04-08 47 views
0

我正在練習Ajax!我有一個簡單的聯繫表,這是我的操作:json MVC中的成功和失敗響應

public ActionResult Contact() 
     { 
      return View("Contact"); 
     } 

     [HttpPost] 
     public ActionResult Contact(ContactViewModel contactViewModel) 
     { 
      if (ModelState.IsValid) 
      { 
       var contact = contactViewModel.ConvertToContactModel(); 
       _contactRepository.Add(contact); 
       _contactRepository.Save(); 
       return Json(new { msg = "Your contact Sent, I'll response soon." }); 
      } 
      return Json("Sorry! Somthing went wrong, try again or contact again"); 
     } 

,這是我的看法:

@model Blog.Web.UI.ViewModels.ContactViewModel 
@{ 
    ViewBag.Title = "Contact"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<div id="Contact"> 
    @using (Ajax.BeginForm("Contact", "Home", new AjaxOptions() { OnSuccess = "Success" })) 
    { 

     <div> 
      @Html.LabelFor(c => c.Name) 
      @Html.TextBoxFor(c => c.Name) 
     </div> 

     <div> 
      @Html.LabelFor(c => c.Email) 
      @Html.TextBoxFor(c => c.Email) 
      @Html.ValidationMessageFor(c => c.Email) 
     </div> 

     <div> 
      @Html.LabelFor(c => c.Subject) 
      @Html.TextBoxFor(c => c.Subject) 
     </div> 

     <div> 
      @Html.LabelFor(c => c.Body) 
      @Html.TextAreaFor(c => c.Body) 
      @Html.ValidationMessageFor(c => c.Body) 
     </div> 
     <input type="submit" value="Send" /> 
    } 
</div> 

<script type="text/javascript"> 
    function Success(context) { 
     if (context[0]) { 
      $("#Contact").empty().html(context[1]); 
     } 
    } 
</script> 

現在我想向用戶顯示成功或取得接觸的失敗,是什麼問題我的代碼不起作用? 它是如此有趣,我的驗證不起作用在這種情況下! 請幫我一下,謝謝

回答

0

與Slicksim相反,我們通常有一個JSON返回類定義在我們的包含布爾變量Success的應用程序模型。然後,我們可以使用它來讓Javascript確定請求是否成功。

public class JsonResponseModel(){ 
    public bool Success {get;set;} 

    public string Message {get;set;} 
} 

public ActionResult Contact() 
     { 
      return View("Contact"); 
     } 

     [HttpPost] 
     public ActionResult Contact(ContactViewModel contactViewModel) 
     { 
      if (ModelState.IsValid) 
      { 
       var contact = contactViewModel.ConvertToContactModel(); 
       _contactRepository.Add(contact); 
       _contactRepository.Save(); 
       return Json(new JsonResponseModel{ Success = true, Messsage = "Your contact Sent, I'll response soon." }); 
      } 
      return Json(new JsonResponseModel{Success = false, Message = "Sorry! Somthing went wrong, try again or contact again"}); 
     } 

<script type="text/javascript"> 
    function Success(response) { 
     if (response.Success) { 
      $("#Contact").empty().html(response.Message); 
     } 
     else{ 
      alert(response.Message); 
     } 
    } 
</script> 

我想這是我們去修改服務器頭,而不是因爲你可能需要做一些不同的,如果驗證在AJAX調用,而不是實際的服務器錯誤(HTTP狀態代碼500失敗的路線/ 404/etc)

0

如果你想要發送錯誤響應,那麼你應該設置Response對象的ResponseCode爲一個合適的http錯誤代碼,比如400請求錯誤。

然後,您需要在ajax.beginform中提供一個錯誤處理程序來顯示您想要的內容。如果你不這樣做,它將返回一個響應代碼200,這就是說,一切都是hunky dory,所以你的錯誤處理程序將不會被觸發