【发布时间】:2017-01-16 15:48:38
【问题描述】:
我一直在努力解决这个问题很长一段时间,但我似乎找不到适合我的解决方案。
我通过覆盖我的 BaseController 类中的 OnException 方法来处理所有错误,所有其他控制器都继承了该方法。
protected override void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
var rd = new RouteData
{
Values = { ["controller"] = "Error", ["action"] = "Index" },
DataTokens = { }
};
var error = $@"Error: {filterContext.Exception.Message} in {filterContext.HttpContext.Request.FilePath}
Details:
{filterContext.Exception.StackTrace}";
_logger = LogManager.GetLogger(GetType());
_logger.Error(error + Environment.NewLine + "Temp Id: " + AppSession.TempId);
IController c = new ErrorController();
c.Execute(new RequestContext(new HttpContextWrapper(System.Web.HttpContext.Current), rd));
}
我的错误控制器非常简单:
public ActionResult Index()
{
ViewBag.Error = "Oops.. Something went wrong";
return View("Error");
}
它有效,错误页面显示,但它总是在局部视图容器内加载,即引发错误的局部视图。相反,我只想正确重定向到错误页面。
我尝试过以这种方式使用和处理错误,但它的行为方式完全相同。我也尝试过在 Global.asax Application_Error 方法中处理错误,我知道这不会有任何区别,但我想要 无论如何都要尝试一下..
我的猜测是因为部分视图是通过 $.get 加载的调用它以某种方式将响应包装在部分视图应该加载的同一个 div/容器中。
任何帮助将不胜感激。如果您需要更多信息,请告诉我。
我也尝试在 SO 上查找类似情况,但我发现没有帖子有很好的解决方案...
提前致谢。
【问题讨论】:
标签: javascript ajax asp.net-mvc error-handling asp.net-ajax