我有一个ASP.NET MVC视图,其中包含我使用AJAX发布到控制器操作的表单,然后我返回部分视图并在同一页面上显示它。
模特A:
Public class InputModel
{
[Required(ErrorMessage = "{0} is required")]
public string A { get; set; }
[Required(ErrorMessage = "{0} is required")]
public string B { get; set; }
}
查看A:
@model InputModel
@using (Ajax.BeginForm("Index", new AjaxOptions()
{
InsertionMode = InsertionMode.Replace,
OnSuccess = "Populate(data)"
}))
{
// Validation Summary does not work
@Html.ValidationSummary()
@Html.TextBoxFor(model => model.A)
@Html.TextBoxFor(model => model.B)
<button id="formSubmission" type="submit"</button>
}
<div id="ResultPartialView"></div>
Function Populate(data)
{
$('#ResultPartialView').html(data);
}
控制器A:
public ActionResult Index()
{
InputModel inputModel = new InputModel();
return View(inputModel);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(InputModel inputModel)
{
if (ModelState.IsValid)
{
ResultModel resultModel = new ResultModel();
resultModel.Id = 5;
return PartialView("Result", resultModel);
}
else
{
Response.StatusCode = 400;
return PartialView("Errors", inputModel);
}
}
这里的问题是我无法在View A上的@ Html.ValidationSummary()中显示错误,因为它是在AJAX调用之前加载到DOM中的。我尝试使用OnSuccess和OnFailure来加载其他部分视图而没有运气。例如,我尝试将一个div添加到View A
<div id="validationSummaryDiv"></div>
然后将其添加到AJAX部分:
OnFailure = "ShowErrors(data)"
然后创建一个更新div id="validationSummaryDiv"
的新JavaScript函数:
Function ShowErrors(data)
{
$('#validationSummaryDiv').html(data);
}
然后返回一个"Errors"
视图(如上面的控制器A所示),其中包含:
@model InputModel
@Html.ValidationSummary()
这不起作用。虽然我可以看到在Firefox网络中出现HTTP 400错误的错误消息但是&#34;数据&#34;没有包含局部视图。我认为这是因为OnFailure不会返回数据响应。
我确定以前有人遇到过这个问题。简而言之,在View A上返回ModelState错误的最佳方法是什么?