因为ViewBag
是dynamic
类型,所以扩展方法不会在其属性上被拾取而不会先转换为适当的类型。
例如:
@(((string)ViewBag.stringProperty).Trunctate())
个人而言,我限制我的ViewBag
使用,以避免投无处不在(除其他原因)。相反,我为每个视图使用强类型的视图模型。
为了完整起见,也可以,如果包含扩展命名空间是不是在你的视图中引用遇到此错误。
您可以在您的意见坐在web.config中添加的命名空间的文件夹:
![enter image description here](https://i.stack.imgur.com/3dtcb.png)
添加命名空间下节:
<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>
或者,你可以在剃须刀视图本身中导入名称空间:
@using MyProject.Extensions
你有没有投的viewBag对象为字符串? – 2013-03-21 16:23:58
@四十二,没有。从字面上看,我是这样做的:'@ ViewBag.object.stringProperty.Trunctate()'其中'object'是一个模型实例,它有几个字符串属性。 – nameless 2013-03-21 16:27:32