MVC - 在ajax表单提交后在视图中更新模型

时间:2015-11-06 00:06:15

标签: asp.net ajax asp.net-mvc-4

我有一个关于MVC4的问题。我有一个表单,我通过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);
}

1 个答案:

答案 0 :(得分:0)

我发现了问题。似乎我错过了对jquery unobtrusive ajax脚本的引用。添加之后,一切正常

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