这是一个奇怪的问题,但我遇到了一个非常奇怪的情况。在我的开发服务器(IIS 和 IIS Express)上,我发出一个 ajax 请求并返回一个表单。然后用户通过 ajax post 发回表单,如果有任何验证错误, Controller 将返回部分 View ,响应代码为 400。在我的 ajax 方法中,我拦截任何 400 错误并重新显示带有验证错误的表单。
我的问题是,当我将我的应用程序上传到我的生产服务器时,我得到的验证错误是没有部分 View 的 400 响应。我什至不知道从哪里开始?以下是我尝试过的方法、我使用的库以及一些示例代码。
ASP.net MVC4, 流利的验证, jQuery,不显眼的验证,malsup-ajaxsubmit
在我的生产服务器上...
- 我加载表单的部分 View 按预期工作。这告诉我应用程序可以毫无问题地找到我的 View ,因为如果验证失败,将重新显示相同的 View 。
- 我的 Controller 使用流式验证正确检测到模型状态错误并以 400 响应(只是没有 View )。
- 我使用 ajaxsubmit 的 ajax 帖子使用 ajax 正确地发布到服务器。
- 我使用 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 Exception 和 ASPNET MVC IIS7 and Bad Request
关于c# - 什么会导致 MVC4 Controller 只返回状态代码而不返回局部 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18517258/