Asp.net mvc 创建自己的HtmlHelper扩展时出现问题

Asp.net mvc 创建自己的HtmlHelper扩展时出现问题,asp.net-mvc,model-view-controller,extension-methods,Asp.net Mvc,Model View Controller,Extension Methods,我有一个HtmlHelper的扩展方法: <%= Html.MyMethod( params )%> 它在visual studio中工作,但(在运行时)抛出: 编译器错误消息:CS0117:“System.Web.Mvc.HtmlHelper”不包含“MyMethod”的定义 奇怪的是,这确实有效: <%= HtmlHelperExtensions.MyMethod( Html, params ) %> 为什么我的方法不作为扩展而作为普通静态调用使用?请确保

我有一个HtmlHelper的扩展方法:

<%= Html.MyMethod( params )%>

它在visual studio中工作,但(在运行时)抛出:

编译器错误消息:CS0117:“System.Web.Mvc.HtmlHelper”不包含“MyMethod”的定义

奇怪的是,这确实有效:

<%= HtmlHelperExtensions.MyMethod( Html, params ) %>


为什么我的方法不作为扩展而作为普通静态调用使用?

请确保在视图中导入包含扩展方法的命名空间

<%@ Import Namespace="MyProject.MyExtensions"%>

或者将其添加到web.config中,以便在每个视图上都可用:

        <namespaces>
            <add namespace="System.Web.Mvc"/>
            <add namespace="System.Web.Mvc.Ajax"/>
            <add namespace="System.Web.Mvc.Html"/>
            <add namespace="System.Web.Routing"/>
            <add namespace="MyProject.MyExtensions"/>
        </namespaces>

我在web.config中找到了答案-有一节告诉它如何编译嵌入HTML的C:

<system.codedom>
    <compilers>
        <compiler language="c#;cs;csharp" 
                  extension=".cs"
                  type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        </compiler>
    </compilers>
</system.codedom>

这缺少一个额外的标志,告诉它使用3.5编译器技巧,让扩展方法和匿名类型在HTML中工作:

<system.codedom>
    <compilers>
        <compiler language="c#;cs;csharp" 
                  extension=".cs"
                  type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <providerOption name="CompilerVersion" value="v3.5" />
        </compiler>
    </compilers>
</system.codedom>


您使用的是什么版本的框架?您还可以显示helper方法签名吗?它是一个简单的方法,类似于:公共静态类HtmlHelperExtensions{public static string Localise(这个HtmlHelper HtmlHelper,string key,params string[]args)…我想我使用的是最新的修补版本。谢谢,这很有用,但不是它。如果这是问题所在,那么静态调用(HtmlHelperExtensions.MyMethod)也不会起作用。