在使用 ASP.NET MVC 的 Kendo UI 网格时,我发现一些令人沮丧的行为,我似乎无法理解或找到任何相关信息。我有一个网格,它向服务器发出 kendoGrid.saveChanges()
请求,该服务器具有一些服务器端验证。如果服务器端验证失败,则返回以下结果:
Response.StatusCode = HTTP_BAD_CLIENT_REQUEST; // const int 400
return PartialView("Error/BadRequest");
分部 View 只有一些基本的 HTML 用于向用户显示错误信息,网格的数据源错误回调执行以下操作:
function errorCallback(e) {
// Handles explicit Ajax and Kendo DataSource error callbacks
var content = e.responseText || e.xhr.responseText;
// Wrapper around a kendo.ui.Window to display content
Core.Alert.raiseAlert(content);
}
当我在 Debug模式下运行项目,或将项目的发布版本发布到本地计算机时,e.xhr.responseText
值已正确填充,即它包含部分 View 的 HTML 消息。但是,一旦我将其移至生产服务器,e.xhr.responseText
就仅包含值 "Bad Request"
,这也是我当前使用的 HTTP 状态代码。我尝试过使用其他状态代码,但结果是相同的(错误名称用作响应文本)。
我觉得这很奇怪的原因是我正在我们公司的另一个内部应用程序项目中做类似的事情,而且效果非常好。它们在 Kendo 和 ASP.NET 的相同版本和工具上运行。
任何人都可以直接向我指出工具或文档(Kendo 或 AJAX),解释为什么响应文本不使用我的部分 View 结果,或者如何将我发送的部分 View 结果映射到 xhr.responseText
属性?
编辑:通过尝试不同的错误代码,我发现某些状态代码(例如 405(不允许))导致返回 IIS 服务器错误 html。所以现在我真的很困惑,为什么有些状态代码只是返回请求的名称,而其他状态代码在我指定返回值和要返回的 View 时返回该错误代码的模板化 HTML?
最佳答案
调查结果和解决方案归功于 this post .
经过一番挖掘,我发现问题归结为 IIS 覆盖了当我使用错误 HTTP 状态代码时发送的内容(以及部分 View )。
解决方案是添加 <httpErrors>
标记为system.webServer
在 web.config 中。我发现以下内容足以让我的部分观点传达给客户。
<system.webServer>
<httpErrors existingResponse="PassThrough" />
</system.webServer>
关于c# - MVC Ajax.error 渲染部分 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39374569/