2010-01-21 56 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中的伎倆命名空間!