我们的应用程序有一个全局控制器,所有其他控制器都继承自该控制器;从内部,在OnResultExecuting
覆盖中,我访问HttpContext
存储在
filterContext.ParentActionViewContext.ViewBag
这允许我在请求的生命周期后期访问 ViewBag 中的此项。
问题:其中一些 filterContext 不是子操作,因此它们的ParentActionViewContext字段为空,我不知道有任何其他方式可以访问 ViewBag。
问题:如果我的控制器偶然发现了一个非子动作,我怎样才能将这个项目传递给 ViewBag?
我想强调我对 ASP.Net MVC4 的缺乏经验——如果有更好的方法来解决同样的问题,请不要犹豫,提出建议。
编辑:添加一些代码进行澄清。
这是我在 Controller 方法中将 myItem保存在ViewBag中的位置:
protected override void OnResultExecuting(ResultExecutingContext filterContext) {
[...]
if (filterContext.ParentActionViewContext != null && filterContext.ParentActionViewContext.ViewBag != null) {
filterContext.ParentActionViewContext.ViewBag["DealerId"] = myItem;
}
[...]
base.OnResultExecuting(filterContext);
}
这是我在 HtmlHelper 中检索它的地方:
public static MvcHtmlString DealerSpecificLessStyleSheet(this HtmlHelper htmlHelper)
{
var linkBuilder = new TagBuilder("link");
var dealerReferenceGuid = (string)htmlHelper.ViewBag["DealerId"];
/* Do something with this ID */
[...]
return new MvcHtmlString(linkBuilder.ToString());
}