因为ViewBag
是一个dynamic
类型,扩展方法不会在没有先转换为适当的类型的情况下在它们的属性上被拾取。
例如:
@(((string)ViewBag.stringProperty).Trunctate())
就我个人而言,我限制了我的使用,ViewBag
以避免不得不到处施放(除其他原因外)。相反,我为每个视图使用强类型视图模型。
为了完整起见,如果您的视图中未引用包含您的扩展的命名空间,也可能会遇到此错误。
您可以在位于您的视图文件夹中的 web.config 中添加命名空间:
将命名空间添加到以下部分:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="MyProject.Extensions" />
</namespaces>
</pages>
</system.web.webPages.razor>
或者,您可以在 razor 视图本身中导入命名空间:
@using MyProject.Extensions