2015-11-06 63 views
0

我有一個關於MVC4的問題。我有一個表單,我通過ajax提交給我的控制器。在控制器中,我使用表單的數據在數據庫中創建一個新條目。MVC - 在Ajax表單提交後更新模型

  • 如果成功,表單字段需要爲空,並且應該顯示一條消息,表明記錄已添加。以便用戶準備好通過表單添加下一個項目。我可以通過JavaScript(通過「OnSuccess」調用)清除「ResetView」方法中的字段,這不是問題
  • 如果發生錯誤,表單字段需要保持填充狀態,並且應該顯示一條消息。在我的情況下,它也調用「OnFailure」方法「ShowError」(它只顯示div「CustomerMessage」)。

我在項目失敗時遇到的問題是,來自我的模型的「CustomMessage」是空的,而我明確地將其設置在我的控制器中。所以在我看來,@ Model.CustomMessage總是空的!

我讀到我應該在我的控制器中調用「ModelState.Clear()」函數,但似乎沒有做任何事情。 有人可以檢查我的代碼中可能出現錯誤嗎?

任何幫助,非常感謝。

查看:

<div id="createform"> 
@using (Ajax.BeginForm("Create", "Payment", new { username = User.Identity.Name }, new AjaxOptions 
{ 
    HttpMethod = "POST", 
    UpdateTargetId = "createform", 
    //OnBegin = "SubmitForm", 
    OnSuccess = "ResetView", 
    OnFailure = "ShowError" 
})) 
{  
    <div id="CustomMessage">@Model.CustomMessage</div> 
    ... bunch of @Html.TextBoxFor stuff (like below) ... 
    @Html.TextBoxFor(model => model.SenderName, new { id = "SenderName"}) 
} 
</div> 

控制器:

[HttpPost] 
public ActionResult Create(PaymentViewModel payment, string username) 
{ 
     if (ModelState.IsValid) 
     { 
      try 
      { 
       paymentRepository.AddPayment(payment.PaymentLine, username); 
       paymentRepository.SaveChanges(); 

       payment.CustomMessage = "success"; 
      } 
      catch (Exception ex) 
      { 
       payment.CustomMessage = "error"; 
      } 
     } 
     else 
     { 
      payment.CustomMessage = "error"; 
     } 

     ModelState.Clear(); 
     return PartialView(payment); 
} 
+0

'ModelState.Clear()'與它無關。你永遠不會碰到你的'OnFailure()'函數,因爲在服務器上沒有任何失敗 - 你所做的只是返回一個局部視圖(不返回HttpException) –

+0

嗨,好吧,但如果我總是顯示div「CustomMessage」成功或失敗),即使那麼@ Model.CustomMessage是空的。雖然我希望它在提交表單後具有「成功」或「錯誤」的價值。任何想法可能是什麼原因? –

+0

你沒有顯示代碼'ResetView()'和'ShowError()' - 你如何顯示錯誤? –

回答

0

我發現這個問題。似乎我錯過了jquery unobtrusive ajax腳本的引用。添加後,一切工作正常

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>