MVC视图找不到我的扩展方法

Jer*_*emy 11 asp.net-mvc extension-methods asp.net-mvc-2

我创建了一个扩展方法:

namespace MyComp.Web.MVC.Html
{
    public static class LinkExtensions
    {
        public static MvcHtmlString ActionImageLink(this HtmlHelper htmlHelper, string linkText, string imageSource, string actionName)
        {
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我从我的mvc app引用了程序集,我尝试在我的视图中导入命名空间:

<%@ Import Namespace="MyComp.Web.Mvc.Html" %>
Run Code Online (Sandbox Code Playgroud)

我还将它添加到Web配置文件中:

<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>
Run Code Online (Sandbox Code Playgroud)

在我的视图中,如果我尝试访问Html.ActionImageLink,则会收到一条错误消息,指出System.Web.Mvc.HtmlHelper不包含ActionImageLink的定义,该定义接受System.Web.Mvc.HtmlHelper的第一个参数类型.我没有看到System.Web.Mvc.HtmlHelper的任何ActionLink扩展方法,仅适用于System.Web.Mvc.HtmlHelper,那么它对.net框架有什么用处,而不适用于我?

Ant*_*kov 14

注意在声明和导入时命名空间的区别.

namespace MyComp.Web.MVC.Html
{
} 

<%@ Import Namespace="MyComp.Web.Mvc.Html" %>
<add namespace="MyComp.Web.Mvc.Html"/>
Run Code Online (Sandbox Code Playgroud)

命名空间区分大小写!


Las*_*org 6

您必须在web.config中添加名称空间,但必须在Views文件夹中添加名称空间