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

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

我有一个 HtmlHelper 的扩展方法:

<%= Html.MyMethod( params )%>

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

Compiler Error Message: CS0117: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'MyMethod'

奇怪的是这确实有效:

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

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

最佳答案

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

关于asp.net-mvc - 创建我自己的 HtmlHelper 扩展时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/944015/

相关文章:

c# - Html.BeginForm 会在该区域后自动添加一个子文件夹

jquery - MVC,使用AJAX/JQUERY异步显示图像列表

css - Umbraco 多站点的不同样式表

ajax - Spring Controller +Ajax返回字符串

ios - 快速扩展类型的最佳实践

c# - JSON 文件发布到 azure 后无法工作,但在本地可以正常工作

java - MVC : Should this function be in the Controller or in the Model

javascript - MVC中通过Jquery从隐藏字段获取多个值

c# - 定义静态方法的更好方法

c# - 实现扩展方法来过滤 IEnumerable<T> 会产生一些错误