2011-11-21 72 views
0

我有一個用MVC2和VB.NET編寫的項目。我使用了很多htmlhelper擴展方法,並且我將它們全部放在公共模塊中。他們工作得很好,我可以編譯和運行我的項目。我引用它們與這個命名空間:MVC2擴展方法在我的視圖中拋出錯誤

​​

所以,再一次,他們的工作很好,我的項目運行和順利編譯。

的問題是,這些擴展方法每一個顯示爲錯誤:

Error 33 'TabbedMenu' is not a member of 'System.Web.Mvc.HtmlHelper(Of Object)'. C:\Projects\MyProject\MyProject.WebUI\Views\Shared\Site.Master 23 21 MyProject.WebUI

這並不阻止編譯和運行項目,它只是創建了一個錯誤,這是煩人。我嘗試過尋找解決方案,但是我發現的所有解決方案都是針對不編譯的項目,所有這些解決方案都使用簡單的解決方案,如引用正確的名稱空間或確保將模塊聲明爲公共。有什麼想法嗎?

回答

0

您是否在您的site.Master中包含了一個導入語句,以便將您的擴展名定義的擴展類包括在內。另外我假設你的擴展類是一個公共靜態類,定義了公共靜態方法?

如果您還沒有,請檢查一下,這可能與您之後的狀況有關。

How do I use an extension method in an ASP.NET MVC View?

+0

首先,如果我沒有導入命名空間,那麼項目就不會像我說的那樣運行(參見上面的註釋)。其次,這是在VB.NET中。擴展方法必須位於自動定義共享方法的模塊中。 再一次,網站的工作原理和擴展方法一樣。他們只是在編譯之前拋出錯誤......儘管他們最終編譯了。 – user961794

+0

也許如果你發佈了Extensions類的例子和一種不能深入瞭解潛在問題的方法?從你所說的話來看,它似乎應該起作用。 – dreza

+0

它正在工作,完美,這就是我想告訴你的。它只是在編譯之前標記錯誤。編譯後,這個錯誤顯然不存在,因爲擴展方法編譯並運行得很好。問題是我想清理列出的錯誤,而不是我需要我的項目工作。 – user961794

0

你需要導入你放置你的擴展的命名空間。而且由於這個問題早在運行時就顯示出來,所以你可以啓用view compilation讓編譯器檢測到問題。不過,我應該警告你編譯視圖是一項耗時的操作。

+0

如果你閱讀我的問題,我說我確實導入了我放置擴展名的命名空間。實際上,我甚至展示了我在其中執行的代碼。 如果我沒有導入放置擴展名的命名空間,那麼項目就不會運行,就像我說的那樣。但該項目確實運行。它完美的作品。唯一的問題是在編譯之前得到標記的惱人的錯誤。 – user961794