Asp.net mvc 为什么不';我的HtmlHelper扩展不能工作吗?

Asp.net mvc 为什么不';我的HtmlHelper扩展不能工作吗?,asp.net-mvc,extension-methods,html-helper,Asp.net Mvc,Extension Methods,Html Helper,我正在建立一个ASP.NETMVC网站。我决定将Web、模型和控制器分离到同一个解决方案中的不同项目中,相互引用,而不是将所有内容都放在一个项目中 参考如下: Web----[references]-->Controller----[references]-->Model 现在我想向HtmlHelper类添加两个自定义方法——它们分别称为“includeDescript”和“IncludeStyle”。它们各自接受一个字符串参数,并分别生成一个脚本或链接标记 根据web上的文档,我创建了一个ex

我正在建立一个ASP.NETMVC网站。我决定将Web、模型和控制器分离到同一个解决方案中的不同项目中,相互引用,而不是将所有内容都放在一个项目中

参考如下:

Web----[references]-->Controller----[references]-->Model

现在我想向HtmlHelper类添加两个自定义方法——它们分别称为“includeDescript”和“IncludeStyle”。它们各自接受一个字符串参数,并分别生成一个脚本或链接标记

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

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

IntelliSense拾取和includeDescript方法,并向我展示了语法。所以我希望一切都能顺利进行

但事实并非如此

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

c:\\Projects\\PhoneReel\\PhoneReel.Web\\Views\\Shared\\Public.Master(11):错误CS0117:“System.Web.Mvc.HtmlHelper”不包含“IncludeScript”的定义。

以下是发生错误的代码行:

httpHandler.ProcessRequest(HttpContext.Current)


你知道这里会出什么问题吗?

你确定编译器设置为.NET Framework 3.5吗?当我无意中将编译器设置为.NET Framework 2.0时,发生了这种情况。请确保在页面中有一个指向扩展方法命名空间的导入指令


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

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

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

或者在web配置名称空间部分:

<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/>


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

如果您使用的是强类型视图,并且您的扩展方法是扩展
HtmlHelper
,它将找不到扩展。您必须创建一个通用扩展程序来扩展
HtmlHelper

publicstaticstringincludeDescript(此HTMLHelperHTML,字符串url){
返回“”;
}
然后您将看到您的extender方法出现


我希望这会有所帮助。

我检查了所有3个项目的项目属性,它们都设置为.NET Framework 3.5。我在Public.Master.cs中放了以下行:使用PhoneReel.Web.Resources;我还公开了下面这行代码。Master仍然得到了完全相同的错误。我两次都试过了——仍然没有结果。顺便说一句,以防万一,我试着用一个全新的解决方案,用新的项目来做这件事,只是添加了我的文件,它仍然给了我完全相同的错误。你能粘贴Include脚本代码和它所在的项目吗?这里正确的解决方案是实际上根本不包括泛型-使用
这个HtmlHelper html
,而不是使用任何泛型或泛型。当然,除非你真的需要模型类型。
public static string IncludeScript<T>(this HtmlHelper<T> html, string url) {
   return "<script type=\"text/javascript\" src=\"" + url + "\"></script>";
}