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);
}
'ModelState.Clear()'與它無關。你永遠不會碰到你的'OnFailure()'函數,因爲在服務器上沒有任何失敗 - 你所做的只是返回一個局部視圖(不返回HttpException) –
嗨,好吧,但如果我總是顯示div「CustomMessage」成功或失敗),即使那麼@ Model.CustomMessage是空的。雖然我希望它在提交表單後具有「成功」或「錯誤」的價值。任何想法可能是什麼原因? –
你沒有顯示代碼'ResetView()'和'ShowError()' - 你如何顯示錯誤? –