3

这是一个奇怪的问题,但我有一个非常奇怪的情况。在我的开发服务器(IIS 和 IIS Express)上,我发出一个 ajax 请求并返回一个表单。然后,用户通过 ajax post 将表单发回,如果有任何验证错误,控制器将使用响应代码 400 发回部分视图。在我的 ajax 方法中,我拦截任何 400 错误并重新显示带有验证错误的表单。

我的问题是,当我将我的应用程序上传到我的生产服务器时,我得到的验证错误是没有部分视图的 400 响应。我什至不知道从哪里开始?这是我尝试过的,我正在使用的库以及一些示例代码。

ASP.net MVC4, Fluent Validation, jQuery, unobtrusive validation, malsup-ajaxsubmit

在我的生产服务器上...

  1. 我加载表单的部分视图按预期工作。这告诉我应用程序在查找我的视图时没有问题,因为如果验证失败,则会重新显示相同的视图。
  2. 我使用流利验证的控制器正确检测到模型状态错误并以 400 响应(只是没有视图)。
  3. 我使用 ajaxsubmit 的 ajax 帖子正在使用 ajax 正确发布到服务器。
  4. 使用 firebug,我逐步完成了我的 ajax 方法,确实返回了 400 错误,但 xhr.responseText 上的唯一内容是“Bad Request”。没有局部视图。我的开发机器再次完美运行。

这是一些代码。

我的表格获取请求:

public ActionResult CreateMedicalEvent(int userId)
{
    var model = new EventModel { MedicalEventUserId = userId };

    return PartialView("_Event.Create", model);
}

我的表格帖子:

[HttpPost]
        public ActionResult CreateMedicalEvent(EventModel model)
        {
            if (!ModelState.IsValid)
            {
                Response.StatusCode = 400;
                return PartialView("_Event.Create", model);//this does not get returned on production server
            }

            //the rest of my code if validation passess
        }

我的ajax方法:

 $('.se-form').ajaxForm({
        delegation: true,
        beforeSubmit: function() {
            ajaxHelpers.modalProcess();//modal progress bar
        },
        success: function(data) {
            $.modal.close();
            //handle a successful post
        },
        error: function(xhr) {
            $.modal.close();
            if (xhr.status == 400) {
                slideEdit.seObj.empty();//this is my form object
                slideEdit.seObj.append(xhr.responseText);//all I get is "Bad Request" from production server
                $.validator.unobtrusive.parse($('form', slideEdit.seObj));
                ajaxHelpers.bindDates(); //because we need to bind event AND format date, we have to do this here
                utilities.formatDecimal();
            } else {
                ajaxHelpers.exc(xhr);
            }
        }
    });

我希望有更多的代码可以发布,但这并不是那么复杂。我的生产服务器上是否缺少一些奇怪的 dll 文件?两台服务器都安装了 MVC4。丢失。请帮忙。谢谢。

4

3 回答 3

7

添加到@STW 的答案,尝试添加到您的 web.config

<system.webServer>

  <httpErrors errorMode=”Detailed” />

</system.webserver>

查看 IIS 错误响应。

另请参阅这些链接了解更多信息

了解 400 错误请求异常ASPNET MVC IIS7 和错误请求

于 2013-08-29T17:54:10.747 回答
4

A400表示一个错误的请求,这意味着 MVC 认为它无法处理正在发送的请求——在这种情况下甚至不会调用控制器操作。尝试启用详细的错误输出,或在 Visual Studio 中针对站点运行请求,看看是否可以获得异常详细信息。它可能发生在路由、控制器构造、动作调用或模型绑定中。

于 2013-08-29T17:23:33.370 回答
-1

就我而言,我不小心将PartialView.cshtml文件放在了错误的 View 目录中。将其移至正确的 View 目录,不再有400错误请求。嗬!

于 2015-01-07T02:45:04.133 回答