在不是子动作的控制器中更改ViewBag,并在View上下文中检索它
本文关键字:并在 ViewBag View 上下文 检索 控制器 | 更新日期: 2023-09-27 18:07:58
我们的应用程序有一个全局控制器,所有其他控制器都继承它;从内部,在OnResultExecuting
覆盖中,我访问存储在
HttpContext
和Web.config获得的内容)。filterContext.ParentActionViewContext.ViewBag
,这允许我在请求生命周期的后期访问ViewBag中的这个项目。
PROBLEM:其中一些filterContext不是子动作,因此他们的ParentActionViewContext字段是空的,我不知道有任何其他方式访问ViewBag。
QUESTION:如果我的控制器偶然发现了一个非子Action,我怎么能把这个项目传递给ViewBag?
我想强调一下我在ASP方面缺乏经验。Net MVC4 -如果有更好的方法来解决这个问题,请不要犹豫,建议它。编辑:添加一些代码来澄清。
这是我保存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());
}
我访问一个项目(通过访问Session获得的东西…
如果你已经在Session中有了这个值,那么你不需要在ViewBag中有它,只是在你当前的情况下。您可以使用helper类将其获取到视图中:
public sealed class UIHelper
{
public static string GetThatValue()
{
return (string)HttpContext.Current.Session["target_key"];
}
}