このアプリケーションには、他のすべてのコントローラーが継承するグローバル コントローラーがあります。内部から、OnResultExecuting
オーバーライド内HttpContext
で、
filterContext.ParentActionViewContext.ViewBag
これにより、リクエストのライフサイクルの後半で ViewBag のこのアイテムにアクセスできるようになります。
問題: これらの filterContext の一部は子アクションではなく、 ParentActionViewContextフィールドが null であり、ViewBag にアクセスする他の方法がわかりません。
質問: コントローラーが子以外のアクションに出くわした場合、どうすればこのアイテムを ViewBag に渡すことができますか?
ASP.Net MVC4 の経験が浅いことを強調したいと思います。この同じ問題に対処するためのより良い方法があれば、遠慮なく提案してください。
編集:明確にするためにいくつかのコードを追加します。
これは、Controller メソッドの 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());
}