0

我们的应用程序有一个全局控制器,所有其他控制器都继承自该控制器;从内部,在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());
    }
4

1 回答 1

0

I access an item (something obtained by accessing the Session...

If you already have the value in Session then you don't need to have it in the ViewBag just specifically in your current situation. You can use a helper class to get it to your views:

public sealed class UIHelper
{
    public static string GetThatValue()
    {
        return (string)HttpContext.Current.Session["target_key"];
    }
}
于 2013-04-08T14:39:30.340 回答