我有一个基本控制器,负责处理摘要。所以我在控制器中的所有操作都只是委托给basecontroller中的动作。
catch (Exception ex)
{
return RedirectToAction("Error", ex);
}
我的基本控制器操作是
public ActionResult Error(Exception ex)
这里的问题是基本控制器中的错误操作中出现了激活细节。我认为这些在重定向期间会被清除。
答案 0 :(得分:1)
在MVC 3中,使用HandleErrorAttribute
和错误视图处理MVC管道内部导致的异常并包含异常数据。
你会像这样注册文件管理器
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
并使用类似于以下内容的视图
@model System.Web.Mvc.HandleErrorInfo
@ViewBag.Title = "Error";
<h2>An Error Has Occurred</h2>
@if (Model != null) {
<p>
@Model.Exception.GetType().Name<br />
thrown in @Model.ControllerName @Model.ActionName
</p>
}
有关更详细的介绍,请参阅以下文章:
http://blog.dantup.com/2009/04/aspnet-mvc-handleerror-attribute-custom.html
答案 1 :(得分:0)
是的,这是正确的,当您进行重定向时,您基本上是向浏览器发送302以便数据丢失。
临时保存数据的一种可能方法是将其保存在tempdata中:
TempData["error"] = ex;
之后,您可以在错误方法中检索它:
Exception ex = TempData["error"] as Exception;
注意:tempdata用于短期数据,在重定向场景中尤其方便