我希望如果发生错误(例如,我输入了错误的网站页面地址),则用户将被重定向到相关的错误页面(在本例中为404)。但是对于错误类型500(内部服务器错误),我在VS Log中看到了重定向,但是用户停留在同一页面上,这导致了错误。
这是我的网页的工作方式:
当用户打开网页时,将执行控制器的ActionResult
方法并返回View();
View呈现html代码,然后启动jQuery ajax,后者使用JsonResult
在此控制器方法中,通过使用SqlClient
在静态类方法中,我得到一个SqlException
(例如,我尝试执行不存在的过程):
System.Data.dll中发生类型为'System.Data.SqlClient.SqlException'的异常,但未在用户代码中处理
其他信息:找不到存储的产品“ dbo.NonExistingProcedureName”。
我希望在这种情况下,用户将被重定向到500错误页面,并且在VS日志中看到了重定向:
事件类型事件持续时间线程详细说明
ASP.NET(已激活)
重定向到“ / error / serverError?aspxerrorpath = / dash / jObject” 11.16s [24128]
工作者线程
...ASP.NET GET“ / error / serverError” 11.16s [24128] 工作者线程
...但是重定向实际上并未完成,用户仍在查看导致错误的页面。
那么,为什么重定向到错误页面不能按预期工作?
答案 0 :(得分:1)
如果我正确阅读了此内容,则ajax请求中发生了500错误。如果是这种情况,那么将返回错误页面,但不会呈现。如果您在浏览器中的开发工具中查看失败的ajax请求的响应,则会看到错误页面。 Ajax的全部优点是您不必回发整个表单,而只允许呈现要更新的部分。因此,如果要重定向到另一个页面,则需要使用javascript处理。
最好在ajax error
或statusCode
回调中捕获错误,然后通过javascript重定向到相关的错误页面。像...
$.ajax({
statusCode: {
500: function() {
alert("fudged up");
}
}
});