我正在建立一个ASP.Net MVC网站。我决定将Web,模型和控制器分离到同一解决方案中的不同项目中,而不是将所有内容都集中在一个项目中。
引用如下:
Web --- [参考文献] --->控制器--- [参考] --->模型
现在我想为HtmlHelper类添加2个自定义方法 - 它们被称为“IncludeScript”和“IncludeStyle”。它们各自采用单个字符串参数,并分别生成脚本或链接标记。
我根据网络上的文档创建了一个扩展类,并编写了两个方法并编译了应用程序。
现在,当我进入Public.Master页面(这是我的主要主页,以及我打算使用这些方法的地方之一)时,我可以输入如下代码:
<%= Html.IncludeScript("\js\jquery.js") %>
IntelliSense选择和IncludeScript方法,并向我显示语法。所以我希望一切都能奏效。
但事实并非如此。
Everything编译,但是一旦我运行应用程序,我就会从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);
任何想法可能会出错?
答案 0 :(得分:16)
检查以确保我们的视图可以访问您的扩展名称空间。您需要在视图中使用此选项:
<%@ Import Namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"%>
或在您的Web配置命名空间部分:
<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/>
答案 1 :(得分:5)
如果您使用强类型视图,并且您的扩展方法正在扩展HtmlHelper<object>
,那么它将无法找到扩展名。您必须创建通用扩展程序才能扩展HtmlHelper<T>
。
public static string IncludeScript<T>(this HtmlHelper<T> html, string url) {
return "<script type=\"text/javascript\" src=\"" + url + "\"></script>";
}
然后你会看到你的扩展器方法出现了。
我希望有所帮助。
答案 2 :(得分:1)
确保在页面中的扩展方法命名空间中有一个import指令。
否则,Visual Studio可能会看到,但您的网站将无法访问。
答案 3 :(得分:0)
您确定编译器已设置为.NET Framework 3.5吗?当我无意中将编译器设置为.NET Framework 2.0时,这发生在我身上
答案 4 :(得分:0)
在IncludeScript方法中,确保您要扩展的是System.Web.Mvc.HtmlHelper。在其他名称空间中可能存在HtmlHelper。