C# 在非子操作的控制器内更改ViewBag,并在视图上下文中检索它

C# 在非子操作的控制器内更改ViewBag,并在视图上下文中检索它,c#,asp.net-mvc-4,viewbag,C#,Asp.net Mvc 4,Viewbag,我们的应用程序有一个全局控制器,所有其他控制器都从该全局控制器继承;从内部,在OnResultExecuting覆盖中,我访问存储在 filterContext.ParentActionViewContext.ViewBag 这允许我在请求生命周期的后期访问ViewBag中的此项 问题:其中一些filterContext不是子操作,因此它们的ParentActionViewContext字段为空,我不知道有任何其他方法可以访问ViewBag 问题:如果我的控制器偶然发现一个非子操作,我如何仍能将

我们的应用程序有一个全局控制器,所有其他控制器都从该全局控制器继承;从内部,在
OnResultExecuting
覆盖中,我访问存储在

filterContext.ParentActionViewContext.ViewBag

这允许我在请求生命周期的后期访问ViewBag中的此项

问题:其中一些filterContext不是子操作,因此它们的ParentActionViewContext字段为空,我不知道有任何其他方法可以访问ViewBag

问题:如果我的控制器偶然发现一个非子操作,我如何仍能将此项目传递给ViewBag

我想强调我对ASP.NETMVC4的经验不足-如果有更好的方法来解决同样的问题,请毫不犹豫地提出建议

编辑:添加一些代码以进行澄清

这是我在我的控制器方法的ViewBag中保存myItem的地方:

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());
    }
我访问一个项目(通过访问会话获得的东西)

如果您已经在会话中具有该值,则不需要仅在当前情况下将其包含在ViewBag中。您可以使用帮助器类将其添加到视图中:

public sealed class UIHelper
{
    public static string GetThatValue()
    {
        return (string)HttpContext.Current.Session["target_key"];
    }
}

您能分享一些代码吗?当然,我会很快修改OP。完成,添加了代码示例。遗憾的是,并不总是从会话中获得-此项是通过检查当前会话、Web.config中的QueryString值和config值获得的。