什么会导致MVC4控制器只返回状态代码而不是部分视图?

时间:2013-08-29 17:21:29

标签: c# jquery ajax asp.net-mvc-4

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

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

ASP.net MVC4, 流利的验证, jQuery,unobtrusive validation,malsup-ajaxsubmit

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

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

    我的表格获取请求:

    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。丢失。请求帮助。感谢。

3 个答案:

答案 0 :(得分:7)

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

<system.webServer>

  <httpErrors errorMode=”Detailed” />

</system.webserver>

查看IIS错误响应。

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

Understanding 400 Bad Request ExceptionASPNET MVC IIS7 and Bad Request

答案 1 :(得分:4)

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

答案 2 :(得分:-1)

在我的情况下,我不小心将PartialView.cshtml文件放在了错误的View目录中。将其移至右侧View目录,不再有400个错误请求。卫生署!