【问题标题】:Problem creating my own extension to HtmlHelper创建我自己的 HtmlHelper 扩展时出现问题
【发布时间】:2009-06-03 10:20:45
【问题描述】:

我有一个 HtmlHelper 的扩展方法:

<%= Html.MyMethod( params )%>

它在 Visual Studio 中工作,但抛出(在运行时):

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

奇怪的是这确实有效:

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

为什么我的方法不能作为扩展工作,而是作为普通的静态调用工作?

【问题讨论】:

  • 您使用的是什么版本的框架?您能否也显示辅助方法签名?
  • 这是一个简单的方法,类似于: public static class HtmlHelperExtensions { public static string Localise( this HtmlHelper htmlHelper, string key, params string[] args ) ...
  • 我想我正在使用最新的补丁发布版本。

标签: asp.net-mvc model-view-controller extension-methods


【解决方案1】:

我在 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>

【讨论】:

    【解决方案2】:

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

    <%@ 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>
    

    【讨论】:

    • 谢谢,这很有用,但不是。如果这是问题所在,那么静态调用 (HtmlHelperExtensions.MyMethod) 也不起作用。
    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 2013-06-05
    相关资源
    最近更新 更多