2011-12-09 70 views
7

我想在我的_Layout中使用我的ViewBag,因爲我所有的視圖都有類似的數據。所以在這裏我做什麼:ViewBag在擴展類中返回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"]; 
} 

注:ViewBag是就在ViewData字典動態包裝。

或者如果您在控制器中執行ViewBag.MetaKeywords = Model.MetaKeywords,那麼您的原始擴展方法也應該起作用。

+0

這正是我需要的!我不記得在哪裏,但有些事情指出我使用helper.ViewContext來訪問ViewBag,這是不正確的,所以謝謝! – Campbeln