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值获得的。