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

时间:2011-11-06 12:02:57

标签: ajax asp.net-mvc modelstate

在我看来,我有2个部分观点。

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

PV1在PV2上的div上使用UpdateTargetId,因为我们想用新添加的项目更新我们的列表。

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

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

ASP.NET MVC AJAX change UpdateTargetId if ModelState is invalid

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

1 个答案:

答案 0 :(得分:7)

您可以尝试使用UpdateTargetId

,而不是使用OnComplete
@using (Ajax.BeginForm(new AjaxOptions { OnComplete = "complete" }))
{
    ...
}

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

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);
    }
}