为什么我的HtmlHelper扩展没有工作?

问题描述:

我正在构建一个ASP.Net MVC网站。我决定将Web,模型和控制器分离到同一解决方案中的不同项目中,而不是将所有内容都放在一个项目中。为什么我的HtmlHelper扩展没有工作?

的引用是这样的:

网站--- [引用] --->控制器--- [引用] --->型号

现在,我想补充2个自定义方法给HtmlHelper类 - 它们被称为“IncludeScript”和“IncludeStyle”。它们各自采用单个字符串参数,并分别生成脚本或链接标记。

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

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

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

智能感知提取和IncludeScript方法,并显示我的语法很好。所以我期望一切都应该工作。

但它没有。

一切编译,但是当我运行应用程序,我得到以下运行时错误从线14 Default.aspx.cs的:

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);

任何想法可能是错误怎么回事?

+0

您可以粘贴包含脚本代码以及它存在的项目吗? – Ramesh 2009-12-30 15:25:04

检查以确保我们的视图可以访问扩展的名称空间。您需要用这个在您的视图:

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

或本在你的web配置的命名空间部分:

<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/> 
+1

我已经尝试了两个 - 仍然没有。 顺便说一句,以防万一,我试图在一个全新的解决方案与新项目,只是添加我的文件,这是*仍然*给我完全相同的错误。 – Jonathan 2008-10-21 01:35:05

+1

它适合我!感谢您的回答! – 2010-10-30 18:20:33

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

+0

我检查了所有3个项目的项目属性,它们都设置为.NET Framework 3.5。 – Jonathan 2008-10-20 02:34:36

确保在页面中的扩展方法名称空间具有import指令。

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

+0

我把下面一行放在Public.Master.cs中: 使用PhoneReel.Web.Resources; 我还在Public.Master 中放置了以下行: 仍然收到完全相同的错误。 – Jonathan 2008-10-20 02:45:18

在IncludeScript方法确保您正在扩展的是System.Web.Mvc.HtmlHelper 。有可能在其他一些命名空间中有一个HtmlHelper。

如果您正在使用强类型视图,并且您的扩展方法正在扩展HtmlHelper<object>,它不会找到扩展名。你必须创建一个通用扩展扩展HtmlHelper<T>

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

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

我希望有帮助。