0

このアプリケーションには、他のすべてのコントローラーが継承するグローバル コントローラーがあります。内部から、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());
    }
4

1 に答える 1

0

アイテムにアクセスします (セッションにアクセスして取得したもの...

Session にすでに値がある場合は、特に現在の状況で ViewBag に値を含める必要はありません。ヘルパー クラスを使用して、ビューにそれを取得できます。

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