我有一个场景,我有一个部分通过$.get
加载的视图。 partial具有以下代码:
@model MvcApplication1.Models.CmaPartialModel
@using (Ajax.BeginForm("TestPost", new AjaxOptions { HttpMethod = "Post" }))
{
@Html.ValidationSummary()
for(var i = 0; i < Model.DataItemsWithLabels.Count; i++)
{
@Html.LabelFor(m => m.DataItemsWithLabels[i].DataName,Model.DataItemsWithLabels[i].DataName)
@Html.TextBoxFor(m => m.DataItemsWithLabels[i].DataValue)
@Html.ValidationMessageFor(m => m.DataItemsWithLabels[i].DataValue,"data value error")
@Html.TextBoxFor(m => m.DataItemsWithLabels[i].DataName)
@Html.ValidationMessageFor(m => m.DataItemsWithLabels[i].DataName,"data name error")
}
<input type="submit" value="Save" />
}
我的控制器操作是:
[HttpPost]
public ActionResult TestPost(CmaPartialModel model)
{
if (ModelState.IsValid)
{
// code removed for quesiton
}
else
{
ModelState.AddModelError("E!", "Want to display this!");
}
return PartialView("Transaction", model);
}
在客户端验证方面,一切都按预期工作。
但是,我没有显示我在控制器中添加的错误。
我做错了什么?
修改
我已将控制器操作更改为包括:ViewBag.Error = "error message";
包含@ViewBag.Error
的部分视图 - 这也没有提升。这可能是AJAX的一个问题吗?
答案 0 :(得分:0)
AddModelError
的第一个参数在这里很重要。它用于确定错误适用于模型的哪个部分。
您指定了E!
,如果它包含的内容不是有效的C#标识符,则可能不会映射到模型的任何部分!
如果要添加常规错误,请使用string.Empty
作为第一个参数。您应该会发现它会显示在验证摘要中。
答案 1 :(得分:0)
向迪恩求助。只是想说清楚我没有正确使用Ajax.BeginForm
。我的观点应该是这样的:
<div id="form">
@using (Ajax.BeginForm("TestPost", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "form" ))}
{
// form stuff here
}
<div>
表单没有更新任何内容 - 不只是错误,因为我没有UpdateTargetId