我已经创建了一个扩展方法:
namespace MyComp.Web.MVC.Html
{
public static class LinkExtensions
{
public static MvcHtmlString ActionImageLink(this HtmlHelper htmlHelper, string linkText, string imageSource, string actionName)
{
...
}
}
}
我从我的mvc app引用了程序集,我尝试在我的视图中导入命名空间:
<%@ Import Namespace="MyComp.Web.Mvc.Html" %>
我还将它添加到了网络配置文件中:
<pages>
<controls>
...
</controls>
<namespaces>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Routing"/>
<add namespace="System.Linq"/>
<add namespace="System.Collections.Generic"/>
<add namespace="MyComp.Web.Mvc.Html"/>
</namespaces>
</pages>
在我的视图中,如果我尝试访问Html.ActionImageLink,则会收到一条错误消息,指出System.Web.Mvc.HtmlHelper不包含ActionImageLink的定义,该定义接受System.Web.Mvc.HtmlHelper的第一个参数类型。我没有看到System.Web.Mvc.HtmlHelper的任何ActionLink扩展方法,仅适用于System.Web.Mvc.HtmlHelper,那么它对.net框架有什么用处,而不适用于我?
答案 0 :(得分:14)
请注意声明命名空间和导入时命名空间的区别。
namespace MyComp.Web.MVC.Html
{
}
<%@ Import Namespace="MyComp.Web.Mvc.Html" %>
<add namespace="MyComp.Web.Mvc.Html"/>
命名空间区分大小写!
答案 1 :(得分:6)
您必须在 web.config 中添加名称空间,但必须在观看文件夹
内的名称中添加名称空间答案 2 :(得分:4)
尝试关闭Visual Studio并再次打开解决方案。当事情开始变得怪异时,有时候会有所帮助。
答案 3 :(得分:1)
VS intellisense是否会自动填充您的扩展方法?它是否自动完成标准的MVC助手方法?如果不是,则发生视图complilation错误。确保在视图开头的Page标签中有正确的“Inherits”属性值。如果您使用强类型视图,请确保存在“强类型”并进行编译。
您是否在定义视图的同一项目中定义了扩展方法?如果不是,则必须在mvc项目中添加引用。最后检查带有扩展方法的程序集(MyComp.Web.Mvc.Html.dll?)是否在应用程序的Bin文件夹中
尝试将名称空间声明添加到放置在MVC项目的Views文件夹中的web.config文件的pages / namespaces部分(而不是主项目web.config文件)。
答案 4 :(得分:1)
关闭并重新打开Visual Studio就可以了!!!
答案 5 :(得分:0)
其中一个原因可能是您返回的是MvcHtmlString而不是字符串。 包括类MvcHtmlString的命名空间。看看它是否有帮助。