【问题标题】:Why don't my HtmlHelper extensions work?为什么我的 HtmlHelper 扩展不起作用?
【发布时间】:2008-10-20 02:06:08
【问题描述】:

我正在构建一个 ASP.Net MVC 网站。我决定将 Web、模型和控制器分离到同一个解决方案中的不同项目中,而不是把所有东西都放在一个项目中,这些项目相互引用。

引用是这样的:

Web ---[references]---> Controller ---[references]---> 模型

现在我想向 HtmlHelper 类添加 2 个自定义方法 - 它们称为“IncludeScript”和“IncludeStyle”。它们每个都接受一个字符串参数,并分别生成一个脚本或链接标签。

我根据网上的文档创建了一个扩展类,并编写了这两个方法并编译了应用程序。

现在,当我进入 Public.Master 页面(这是我的主要母版页,也是我打算使用这些方法的地方之一)时,我可以输入如下代码:

<%= Html.IncludeScript("\js\jquery.js") %>

IntelliSense 采用 IncludeScript 方法并向我显示语法。所以我希望一切都能正常工作。

但事实并非如此。

一切都可以编译,但只要我运行应用程序,就会从 Default.aspx.cs 的第 14 行收到以下运行时错误:

c:\\Projects\\PhoneReel\\PhoneReel.Web\\Views\\Shared\\Public.Master(11): error CS0117: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'IncludeScript'

这是发生错误的代码行:

httpHandler.ProcessRequest(HttpContext.Current);

有什么想法可以在这里出错吗?

【问题讨论】:

  • 能否粘贴包含脚本代码以及它所在的项目?

标签: asp.net-mvc extension-methods html-helper


【解决方案1】:

检查以确保我们的视图可以访问您的扩展程序的命名空间。在您看来,您需要以下任一:

<%@ Import Namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"%>

或者在你的网络配置命名空间部分:

<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/>

【讨论】:

  • 我都试过了——仍然没有。顺便说一句,以防万一,我尝试在一个全新的解决方案中使用新项目并添加我的文件,它 STILL 给了我完全相同的错误。
【解决方案2】:

如果您使用 强类型 视图,并且您的扩展方法是扩展 HtmlHelper&lt;object&gt;,则它不会找到扩展。你必须创建一个通用扩展器来扩展HtmlHelper&lt;T&gt;

public static string IncludeScript<T>(this HtmlHelper<T> html, string url) {
   return "<script type=\"text/javascript\" src=\"" + url + "\"></script>";
}

然后你会看到你的扩展方法出现了。

希望对你有帮助。

【讨论】:

  • 这里正确的解决方案是实际上根本不包含泛型 - 使用 this HtmlHelper html 而不是使用任何泛型 。当然,除非你真的需要模型类型。
【解决方案3】:

确保在您的页面中为您的扩展方法命名空间添加一个导入指令。

否则,Visual Studio 可能会看到,但您的网站将无法看到。

【讨论】:

  • 我在 Public.Master.cs 中加入以下行: using PhoneReel.Web.Resources;我还将以下行放在 Public.Master 仍然得到完全相同的错误。
【解决方案4】:

您确定编译器设置为 .NET Framework 3.5?当我无意中将编译器设置为 .NET Framework 2.0 时发生这种情况

【讨论】:

  • 我检查了所有 3 个项目的项目属性,它们都设置为 .NET Framework 3.5。
【解决方案5】:

在 IncludeScript 方法中,确保您扩展的是 System.Web.Mvc.HtmlHelper。其他命名空间中可能存在 HtmlHelper。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 2022-11-20
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多