c# - 为什么我不能在 Razor WebGrid 的委托(delegate)中使用我的扩展方法

标签 c# asp.net-mvc webgrid

我正在使用 MVC 3 引入的 WebGrid,但在为 format 参数传递委托(delegate)时无法应用我自己的扩展方法。

使用:

Grid.Column("MyProperty", "MyProperty", 
format: @<span class="something">@item.MyProperty.MyExtensionMethodForString()</span>)

我得到了

ERROR: 'string' does not contain a definition for 'MyExtensionMethodForString'

我尝试过转换,但没有用

Grid.Column("MyProperty", "MyProperty", 
format: @<span class="something">@((string)(item.MyProperty).MyExtensionMethodForString())</span>)

如果我使用标准方法,它会起作用:

Grid.Column("MyProperty", "MyProperty", 
format: @<span class="something">@(Utils.MyExtensionMethodForString(item.MyProperty))</span>)

我也尝试过将扩展放在同一个命名空间中,但没有结果。

如何使用我心爱的扩展程序?

编辑:命名空间本身不是问题,扩展可用于所有 View 和类的命名空间,我可以毫无问题地在同一个 View 中使用它。问题是在委托(delegate)中使用它时。

最佳答案

这不是 WebGrid 或 Razor 的限制。这是 C# dynamic 的限制类型。您不能在动态上使用扩展方法。格式助手采用 Func<dynamic, object>作为参数,所以 item参数是一个动态类型。

wrote about this exact issue几年前。

关于c# - 为什么我不能在 Razor WebGrid 的委托(delegate)中使用我的扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15580257/

相关文章:

c# - 有没有办法通过反射设置 C# 只读自动实现的属性?

asp.net-mvc - dropzonejs 多文件上传无法按预期工作

c# - 了解随机二维方向矢量生成

asp.net - MVC4 IEnumerable 模型绑定(bind)始终为 null

c# - 从 ad lds 实例验证 asp.net mvc 5 应用程序

header - MVC3 WebGrid 格式化或样式列标题

c# - MVC3 中的 WebGrid 列格式问题

asp.net-mvc-3 - LINQ to Entities 仅支持转换 EDM 基元或枚举类型

c# - 使用 WCF 有什么好处?

c# - 为什么不能用派生类代替接口(interface)成员中的基类?