2011-12-09 11 views
7

私のビューにはすべて同じようなデータがあるので、私の_Layoutに私のViewBagを使用したいと思います。だからここに私は何をすべきか:ViewBag返り値null拡張クラスでnull

私の見解では:

ViewBag.MetaKeywords = Model.MetaKeywords 

私はHtmlHelperの

public static string MetaKeywords(this HtmlHelper helper) 
{ 
    return helper.ViewContext.Controller.ViewBag.MetaKeyWords; 
} 

そして、私の_layout中にバインドさ拡張クラスを持っている:

@Html.MetaKeywords() 

問題は私の拡張メソッドがnullを返すことです。 @ViewBag.MetaKeyWordsの代わりに拡張メソッドを使用する理由他の機能にはロジックがあり、私たち自身の間で共有したいからです。

ありがとうございました。

+3

あなたは 'ViewBag.MetaDescription'を設定していますが、あなたのヘルパーで' ViewBag.MetaKeyWords'にアクセスしようとすると、サンプルコードの入力ミスですか?プロパティ名が一致する必要があるためです。 – nemesv

+0

申し訳ありませんが、投稿に誤りがありました。私はそれを修正しましたので、問題は解決しません。 – dlanglois6

答えて

5

考慮して設定されたViewBag/ViewData特性がhelper.ViewData代わりにhelper.ViewContext. ...でアクセスすることができるかみそりを使用して:

public static string MetaKeywords(this HtmlHelper helper) 
{ 
    return (string) helper.ViewData["MetaKeyWords"]; 
} 

注:ViewBagViewData辞書の周りにだけ動的ラッパーです。

コントローラでViewBag.MetaKeywords = Model.MetaKeywordsを実行すると、元の拡張方法も有効になります。

+0

これは私が必要としていたものです!私はどこを覚えていないのですが、helper.ViewContextを使用してViewBagにアクセスするように指示しましたが、これは間違っていました。ありがとうございます!! – Campbeln

関連する問題