我想在我的_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?因为其他一些函数都有逻辑,我们希望在自己之间共享它.
谢谢您的帮助.
解决方法
使用Razor时,可以使用helper.ViewData而不是helper.ViewContext访问View中设置的ViewBag / ViewData属性. …:
public static string MetaKeywords(this HtmlHelper helper) { return (string) helper.ViewData["MetaKeyWords"]; }
注意:ViewBag只是ViewData字典的动态包装器.
或者,如果您在Controller中执行ViewBag.MetaKeywords = Model.MetaKeywords,那么您的原始扩展方法也应该有效.