ASP.NET MVC - ValidationSummary与MVC和AJAX调用

时间:2016-05-06 13:13:11

标签: ajax asp.net-mvc

我有一个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错误的最佳方法是什么?

0 个答案:

没有答案