为什么我的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);
任何想法可能是错误怎么回事?
检查以确保我们的视图可以访问扩展的名称空间。您需要用这个在您的视图:
<%@ Import Namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"%>
或本在你的web配置的命名空间部分:
<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/>
我已经尝试了两个 - 仍然没有。 顺便说一句,以防万一,我试图在一个全新的解决方案与新项目,只是添加我的文件,这是*仍然*给我完全相同的错误。 – Jonathan 2008-10-21 01:35:05
它适合我!感谢您的回答! – 2010-10-30 18:20:33
您确定编译器设置为.NET Framework 3.5吗?当我无意中将编译器设置为.NET Framework 2.0时,发生了这种情况。
我检查了所有3个项目的项目属性,它们都设置为.NET Framework 3.5。 – Jonathan 2008-10-20 02:34:36
确保在页面中的扩展方法名称空间具有import指令。
否则,Visual Studio可能会看到,但您的网站将无法看到。
我把下面一行放在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>";
}
然后你会看到你的扩展方法出现。
我希望有帮助。
您可以粘贴包含脚本代码以及它存在的项目吗? – Ramesh 2009-12-30 15:25:04