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

时间:2010-01-21 17:01:26

标签: asp.net-mvc asp.net-mvc-2 extension-methods

我已经创建了一个扩展方法:

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框架有什么用处,而不适用于我?

6 个答案:

答案 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)

  1. VS intellisense是否会自动填充您的扩展方法?它是否自动完成标准的MVC助手方法?如果不是,则发生视图complilation错误。确保在视图开头的Page标签中有正确的“Inherits”属性值。如果您使用强类型视图,请确保存在“强类型”并进行编译。

  2. 您是否在定义视图的同一项目中定义了扩展方法?如果不是,则必须在mvc项目中添加引用。最后检查带有扩展方法的程序集(MyComp.Web.Mvc.Html.dll?)是否在应用程序的Bin文件夹中

  3. 尝试将名称空间声明添加到放置在MVC项目的Views文件夹中的web.config文件的pages / namespaces部分(而不是主项目web.config文件)。

答案 4 :(得分:1)

关闭并重新打开Visual Studio就可以了!!!

答案 5 :(得分:0)

其中一个原因可能是您返回的是MvcHtmlString而不是字符串。 包括类MvcHtmlString的命名空间。看看它是否有帮助。