2010-01-21 92 views
11

我创建了一个扩展方法:MVC视图不能找到我的扩展方法

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

我引用从我的MVC应用程序的组件,而我已经试过进口在我看来,命名空间:

<%@ 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.ActionImage链接我得到一个错误,说System.Web.Mvc.HtmlHelper不包含接受第一个参数类型System.Web.Mvc.HtmlHelper的ActionImageLink的定义。我没有看到任何针对System.Web.Mvc.HtmlHelper的ActionLink扩展方法,仅针对System.Web.Mvc.HtmlHelper,那么它如何为.net框架工作,而不是为我?

+0

这很奇怪。看起来你做得很对。我假设你运行网站时出现错误,而不仅仅是在VS代码视图中? – Omar 2010-01-21 17:20:14

+0

你能粘贴你的视图代码吗? – Rony 2010-01-21 17:22:48

+0

@Baddie,如果我编译,没有,甚至在我运行应用程序之前VS显示我的错误。 – Jeremy 2010-01-21 17:31:14

回答

14

注意声明和导入时名称空间不同的情况。

namespace MyComp.Web.MVC.Html 
{ 
} 

<%@ Import Namespace="MyComp.Web.Mvc.Html" %> 
<add namespace="MyComp.Web.Mvc.Html"/> 

命名空间区分大小写!

+0

Arg!我确实知道他们是大小写敏感的,但我没有发现错字。但是再一次,除了你,其他人也没有!哈! – Jeremy 2010-01-23 07:58:11

+0

好赶上,错过了 – hunter 2010-01-25 15:17:44

0

原因之一可能是你正在返回一个MvcHtmlString而不是一个字符串。 包含类MvcHtmlString的名称空间。看看它是否有帮助。

+0

虽然现有的ActionLink扩展方法也返回MvcHtmlString。 – Jeremy 2010-01-21 17:30:25

+0

函数的返回值与它无关。 – Omar 2010-01-21 17:35:30

+0

我尝试了Jeremy的上述代码,它对我来说工作正常。它的奇怪,它不适合杰里米。 – San 2010-01-21 17:45:20

4

尝试关闭Visual Studio并再次打开您的解决方案。当事情开始变得怪异时,有时这会有所帮助。

+1

这对我有用! – Mitch 2012-10-02 14:20:14

1
  1. VS intellisense是否自动完成您的扩展方法?它是否自动完成标准的MVC助手方法?如果没有,则发生视图复合错误。确保在视图的开始处的页面标记中具有正确的“继承”属性值。如果您使用强类型视图,请确保“强类型”存在并编译。

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

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

6

必须在web.config中在一个里面添加了views文件夹

1

关闭并重新打开Visual Studio中的伎俩命名空间!