在使用用于ASP.NET MVC的Kendo UI Grid时,我发现了一些令人沮丧的行为,我似乎无法理解或找到任何信息。我有一个网格向服务器发出kendoGrid.saveChanges()
请求,该服务器有一些服务器端验证。如果服务器端验证失败,则返回以下结果:
Response.StatusCode = HTTP_BAD_CLIENT_REQUEST; // const int 400
return PartialView("Error/BadRequest");
部分视图只有一些用于向用户显示错误信息的基本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);
}
当我在调试模式下运行项目,或者将项目的发布版本发布到我的本地计算机时,e.xhr.responseText
值被正确填充,即它包含部分视图的HTML消息。但是,只要我将其移动到生产服务器,e.xhr.responseText
只包含值"Bad Request"
,这也是我当前使用的HTTP状态代码。我尝试过使用其他状态代码,但结果相同(错误名称用作responseText)。
我觉得这很奇怪的原因是我在另一个项目中为我们公司的内部应用程序做了类似的事情,这非常合适。它们运行在与Kendo和ASP.NET相同的版本和工具上。
任何人都可以指向我直接使用工具或文档,Kendo或AJAX,它解释了为什么响应文本没有使用我的部分视图结果,或者我如何映射我发送给{{1}的部分视图结果属性?
编辑:通过尝试不同的错误代码,我发现某些状态代码如405(不允许)导致返回IIS服务器错误html。所以现在我真的很难过,为什么有些状态代码只返回一个请求的名称,而其他人在我指定返回值并返回视图时返回该错误代码的模板化HTML?
答案 0 :(得分:1)
对结果和解决方案的信任归this post。
在做了一些挖掘后,我发现问题归结为IIS在我使用错误的HTTP状态代码时覆盖了内容(因此部分视图)。
解决方案是在web.config中向<httpErrors>
添加system.webServer
标记。我发现以下内容足以让我的部分观点到达客户端。
<system.webServer>
<httpErrors existingResponse="PassThrough" />
</system.webServer>