c# - 什么会导致 MVC4 Controller 只返回状态代码而不返回局部 View ?

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

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

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

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

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

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

这是一些代码。

我的表单获取请求:

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 错误响应。

另请参阅这些链接以获取更多信息

Understanding 400 Bad Request ExceptionASPNET MVC IIS7 and Bad Request

关于c# - 什么会导致 MVC4 Controller 只返回状态代码而不返回局部 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18517258/

相关文章:

c# - MVC3 IControllerFactory ReleaseController内存泄漏

c# - PropertyGrid 滚动位置在设置时不改变

c# - 比较 SqlCommand 中的 DateTime

javascript - 如何在ajax中引用文本字段名称?

javascript - BootStrap Modal + JS/AJAX 复选框表单提交

javascript - jQuery Ajax OPTIONS 调用中的自定义 header

c# - ObservableCollection 更改后 ListView 未更新

javascript - 如何将内容添加到模态对话框 (kbModal.js)

javascript - 当用户刷新或离开网页时调用ajax函数

javascript - 使用jquery访问json数据来设置值