在我的Site.Master文件中,我有3个简单的ViewData参数(在整个解决方案中仅有的3个)。这些ViewData值对于我应用程序中的每个页面都非常重要。由于这些值在我的Site.Master中被使用,我创建了一个抽象的SiteController类来覆盖OnActionExecuting方法,并为我的解决方案中每个控制器上的每个Action方法填充这些值。
[HandleError(ExceptionType=typeof(MyException), View="MyErrorView")]
public abstract class SiteController : Controller
{
protected override void OnActionExecuting(...)
{
ViewData["Theme"] = "BlueTheme";
ViewData["SiteName"] = "Company XYZ Web Portal";
ViewData["HeaderMessage"] = "Some message...";
base.OnActionExecuting(filterContext);
}
}
我面临的问题是,当SiteController类级别的HandleErrorAttribute被触发时,这些值没有传递给MyErrorView(最终传递到Site.Master)。下面是一个简单的场景来展示我的问题:
public class TestingController : SiteController
{
public ActionResult DoSomething()
{
throw new MyException("pwnd!");
}
}
我已经尝试通过在SiteController中重写OnException()方法来填充ViewData参数,但没有任何效果。 :(
在这种情况下,传递ViewData参数到Site.Master的最佳方法是什么?
ViewDataDictionary<HandleErrorInfo>
构造函数由于filterContext.Controller.ViewData
中的不正确模型类型而失败。我仍然认为这个答案很有帮助并且点赞了,只需要进行一些小改动即可。 - fearofawhackplanet