繁体   English   中英

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

[英]What would cause a MVC4 controller to only return a status code and no partial view?

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

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

ASP.net MVC4,流畅验证,jQuery,不显眼的验证,malsup-ajaxsubmit

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

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

这是一些代码。

我的表格获取请求:

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

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

<system.webServer>

  <httpErrors errorMode=”Detailed” />

</system.webserver>

看到IIS错误响应。

另请参阅这些链接

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM