我想在我的_Layout中使用我的ViewBag,因为我的所有视图都有类似的数据。所以我在这做什么:
在我的观点中:
ViewBag.MetaKeywords = Model.MetaKeywords
我在HtmlHelper
上绑定了一个扩展类public static string MetaKeywords(this HtmlHelper helper)
{
return helper.ViewContext.Controller.ViewBag.MetaKeyWords;
}
在我的_Layout中:
@Html.MetaKeywords()
问题是我的扩展方法返回null。为什么我使用扩展方法而不是@ViewBag.MetaKeyWords
?因为其他一些函数都有逻辑,我们希望在自己之间共享它。
感谢您的帮助。
答案 0 :(得分:5)
使用Razor时,可以使用ViewBag/ViewData
代替helper.ViewData
访问在视图中设置的helper.ViewContext. ...
属性:
public static string MetaKeywords(this HtmlHelper helper)
{
return (string) helper.ViewData["MetaKeyWords"];
}
注意:ViewBag
只是ViewData
词典的动态包装。
或者,如果您在Controller中执行ViewBag.MetaKeywords = Model.MetaKeywords
,那么您的原始扩展方法也应该有效。