MVC Ajax.渲染局部视图错误

本文关键字:视图 错误 染局 Ajax MVC | 更新日期: 2023-09-27 18:06:15

在使用Kendo UI Grid for ASP时。. NET MVC我发现一些令人沮丧的行为,我似乎无法理解或找到任何信息。我有一个网格,使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的相同版本和工具上。

有没有人可以在工具或文档,剑道或AJAX的直接指向我,这解释了为什么响应文本不使用我的部分视图结果,或者我如何将我发送到xhr.responseText属性的部分视图结果映射?

编辑:通过尝试不同的错误码,我发现某些状态码,如405(不允许)导致IIS服务器错误html被返回。现在我真的很困惑,为什么当我指定返回值和要返回的视图时,一些状态码只返回请求的名称,而另一些状态码返回错误码的模板化HTML ?

MVC Ajax.渲染局部视图错误

这些发现和解决方案都归于本文。

在做了一些挖掘之后,我发现问题归结为IIS覆盖的内容(因此部分视图)被发送,当我使用错误的HTTP状态码。

解决方案是在web.config中的system.webServer中添加<httpErrors>标签。我发现以下内容足以让我的部分视图到达客户端。

<system.webServer>
    <httpErrors existingResponse="PassThrough" />
</system.webServer>