当ModelState无效时提交数据后的Ajax表单和UpdateTargetId

Bro*_*ato 2 ajax asp.net-mvc modelstate

在我看来,我有2个局部视图.

  • 第一个局部视图(PV1):用户可以在文本框中键入项目并通过ajax表单提交.
  • 第二部分视图(PV2):用户可以看到先前提交的项目列表.

PV1使用UpdateTargetIdPV2上的div,因为我们想用新添加的项目更新我们的列表.

当PV1上提交的项目有效时,一切正常.ModelState.IsValid == false提交ajax表单时它不起作用.它不起作用,因为UpdateTargetId位于PV2上,我需要更新PV1以显示ModelState错误.所以我们在PV2上遇到了PV1的重复!

下面是另一个类似问题的stackoverflow帖子,但没有提供解决方案.

如果ModelState无效,ASP.NET MVC AJAX会更改UpdateTargetId

我认为Json替代方案可能是一个解决方案,但我想知道我们是否可以调整标准的Ajax表单方法以满足我们的需求?

Dar*_*rov 7

而不是使用UpdateTargetId,你可以尝试使用OnComplete:

@using (Ajax.BeginForm(new AjaxOptions { OnComplete = "complete" }))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

并在此处理程序内部测试结果视图中是否存在错误:

function complete(result) {
    var isError = $('span.field-validation-error', result.responseText).length > 0;
    if (isError) {
        // there was an error => we update the container of the form
        $('#frmContainer').html(result.responseText);
    } else {
        // no error => we hide validation errors and update the result container
        $('#frm .field-validation-error').hide();
        $('#frm .input-validation-error').removeClass('input-validation-error');
        $('#result').html(result.responseText);
    }
}
Run Code Online (Sandbox Code Playgroud)