2008-10-20 80 views
11

我正在構建一個ASP.Net MVC網站。我決定將Web,模型和控制器分離到同一解決方案中的不同項目中,而不是將所有內容都放在一個項目中。爲什麼我的HtmlHelper擴展沒有工作?

的引用是這樣的:

網站--- [引用] --->控制器--- [引用] --->型號

現在,我想補充2個自定義方法給HtmlHelper類 - 它們被稱爲「IncludeScript」和「IncludeStyle」。它們各自採用單個字符串參數,並分別生成腳本或鏈接標記。

根據Web上的文檔,我創建了一個擴展類,並編寫了兩種方法並編譯了應用程序。

現在,當我進入Public.Master頁面(這是我的主要母版頁,並在那裏我打算使用這些方法的地方之一),我可以輸入代碼,如下圖所示:

<%= Html.IncludeScript("\js\jquery.js") %>

智能感知提取和IncludeScript方法,並顯示我的語法很好。所以我期望一切都應該工作。

但它沒有。

一切編譯,但是當我運行應用程序,我得到以下運行時錯誤從線14 Default.aspx.cs的:

c:\\Projects\\PhoneReel\\PhoneReel.Web\\Views\\Shared\\Public.Master(11): error CS0117: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'IncludeScript'

這裏是代碼行的發生在錯誤:

httpHandler.ProcessRequest(HttpContext.Current);

任何想法可能是錯誤怎麼回事?

+0

您可以粘貼包含腳本代碼以及它存在的項目嗎? – Ramesh 2009-12-30 15:25:04

回答

16

檢查以確保我們的視圖可以訪問擴展的名稱空間。您需要用這個在您的視圖:

<%@ Import Namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"%> 

或本在你的web配置的命名空間部分:

<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/> 
+1

我已經嘗試了兩個 - 仍然沒有。 順便說一句,以防萬一,我試圖在一個全新的解決方案與新項目,只是添加我的文件,這是*仍然*給我完全相同的錯誤。 – Jonathan 2008-10-21 01:35:05

+1

它適合我!感謝您的回答! – 2010-10-30 18:20:33

0

您確定編譯器設置爲.NET Framework 3.5嗎?當我無意中將編譯器設置爲.NET Framework 2.0時,發生了這種情況。

+0

我檢查了所有3個項目的項目屬性,它們都設置爲.NET Framework 3.5。 – Jonathan 2008-10-20 02:34:36

1

確保在頁面中的擴展方法名稱空間具有import指令。

否則,Visual Studio可能會看到,但您的網站將無法看到。

+0

我把下面一行放在Public.Master.cs中: 使用PhoneReel.Web.Resources; 我還在Public.Master 中放置了以下行:<%@ Import Namespace =「PhoneReel.Web.Resources」%> 仍然收到完全相同的錯誤。 – Jonathan 2008-10-20 02:45:18

0

在IncludeScript方法確保您正在擴展的是System.Web.Mvc.HtmlHelper 。有可能在其他一些命名空間中有一個HtmlHelper。

5

如果您正在使用強類型視圖,並且您的擴展方法正在擴展HtmlHelper<object>,它不會找到擴展名。你必須創建一個通用擴展擴展HtmlHelper<T>

public static string IncludeScript<T>(this HtmlHelper<T> html, string url) { 
    return "<script type=\"text/javascript\" src=\"" + url + "\"></script>"; 
} 

然後你會看到你的擴展方法出現。

我希望有幫助。

相關問題