【问题标题】:ASP.NET MVC 2 JQuery POST not displaying the model state errorsASP.NET MVC 2 JQuery POST 不显示模型状态错误
【发布时间】:2010-03-29 03:31:37
【问题描述】:

我使用asp.net mvc 已经有一段时间了(但我还是个初学者)。由于 jquery 回发,我希望能够更新两个视图。

基本上我有一个列表和一个详细信息视图。详细信息视图使用 jquery 弹出窗口(使用 jquery-UI 弹出窗口)呈现。如果详细信息保存成功(即详细信息视图上没有验证错误),我只想更新列表。但是,如果详细信息视图中有任何验证错误,我想更新详细信息视图以便用户看到验证错误。

所以我想在我的控制器中,我返回一个 JsonResult 而不是一个视图。

[HttpPost]
public ActionResult SavePersonInfo(Person p) {
    if(ModelState.Valid) {
        return View("PersonList");
    }

    return Json({Error = true, View = PartialView("PersonDetails", p)});
}

如您所见,如果没有错误,我会返回人员列表视图,但如果有任何验证错误,我会返回详细信息视图。我返回 JsonResult 的原因是我需要告诉我的视图有一个错误,以便视图(jquery)知道要更新哪个部分(例如是否更新人员列表“div”或弹出对话框“div” ')。

因此,在我看来,jquery 如下(请假设有一个用于输入人员详细信息的表单,并在单击“保存”按钮时调用“SubmitPersonForm();”函数):

<script type="text/javascript>
    $('#btnSave').click(function (event) {
            onBegin();

            $.ajax(
            {
                type: "POST",
                url: "/Person/Save",
                data: $('form').serialize(),
                success: function (result) {
                 if(result.Error) {
                        $('#dvDetails').html($(result).View));
                    }
                    else {
                        $('#dvPersonList').html($result);
                    }  
                }
            });
        });
</script>

所以我现在遇到的问题是,当出现验证错误时,我确实看到了正确的“div”正在更新,但我丢失了 asp.net mvc 验证消息。我没有看到任何红色的验证错误,好像 ASP.NET MVC 完全忽略了它们。但是,我的 ModelState 确实有这些错误,只是没有显示在详细信息视图中。我的详细信息视图中确实有验证摘要和 Html.ValidationFor(m => ...) 语句。

谁能告诉我为什么我没有看到验证错误?虽然我使用的是 JSonResult,但在渲染“dvDetails”时,我确实使用了正确的属性,这是一个有效的视图。我在做一些我不应该在 asp.net mvc 中做的事情吗?顺便说一句,我将 asp.net mvc2 RC 与 Visual Studio 2010 RC 一起使用。

谢谢。

【问题讨论】:

    标签: asp.net-mvc-2-validation


    【解决方案1】:

    Url 与操作名称不匹配...不确定您是否在控制器上调用了错误的方法...只是一个想法。 :-)

    【讨论】:

    • 感谢您的回复。抱歉,这是我的问题中的错字。我绝对确定该网址是正确的。事实上,我已经调试过了,它确实调用了我的控制器。事实上,当验证失败时,ModelState 包含验证错误(由于我的数据注释)。真的不知道为什么我在视图中看不到错误:(。
    • 好吧,只是想确定一下……当它被重新定义为 PartialView 时可能会受到限制你看过这个吗:stackoverflow.com/questions/1556533/… 似乎是同一个问题。
    【解决方案2】:

    ASP.NET MVC 代码处理响应以在回发期间显示存储在 ModelState 中的验证错误。因为您使用的是 Ajax Post,所以回发代码不会重新构建页面并显示验证错误。如果你想显示验证错误,你必须自己处理。

    我通过在响应中将 ModelState 错误作为数组传递来完成此操作。我处理我的 Ajax 响应以使用响应中的相应错误消息更新表单中的验证错误占位符元素。

    不过,一个警告:ModelState 中的键的大小写可能已更改,因此表单中的元素 ID 字符串与用于键的字符串不完全匹配。 ModelStateDictionary 不区分大小写,但 DOM ID 不区分大小写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多