我有一个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来加载其他部分视图而没有运气 . 例如,我尝试在View A中添加div

<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错误的错误消息,但“数据”不包含局部视图 . 我认为这是因为OnFailure不会返回数据响应 .

我确定之前有人有这个问题 . 简而言之,在View A上返回ModelState错误的最佳方法是什么?