我有一个关于MVC4的问题。我有一个表单,我通过ajax提交给我的控制器。在控制器中,我使用表单的数据在数据库中创建一个新条目。
项目失败时我遇到的问题是我模型中的“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 :(得分:0)
我发现了问题。似乎我错过了对jquery unobtrusive ajax脚本的引用。添加之后,一切正常
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>