2012-10-02 93 views
22

我想使用自定義@ Html.ActionLinkSystem.Web.Mvc.HtmlHelper」不包含定義‘ActionLink的’

我嘗試使用下面的代碼: -

public static class LinkExtensions 
{ 
    public static MvcHtmlString MyActionLink(
     this HtmlHelper htmlHelper, 
     string linkText, 
     string action, 
     string controller) 
    { 
     var currentAction = htmlHelper.ViewContext.RouteData.GetRequiredString("action"); 
     var currentController = mlHelper.ViewContext.RouteData.GetRequiredString("controller"); 

     if (action == currentAction && controller == currentController) 
     { 
      var anchor = new TagBuilder("a"); 
      anchor.Attributes["href"] = "#"; 
      anchor.AddCssClass("currentPageCSS"); 
      anchor.SetInnerText(linkText); 
      return MvcHtmlString.Create(anchor.ToString()); 
     } 

     return htmlHelper.ActionLink(linkText, action, controller); 
    } 
} 

Custom ActionLink helper that knows what page you're on

但我正在逐漸

System.Web.Mvc.HtmlHelper」不包含一個定義 「ActionLink的」和沒有擴展方法「ActionLink的」接受類型的第一 參數「System.Web.Mvc.HtmlHelper」可以找到(是否 缺少using指令或程序集引用?

+2

如果你確信你已經添加命名你的配置裏面,你可能必須關閉並重新打開該文件 - 檢查這個答案http://stackoverflow.com/questions/4136703/razor-htmlhelper-extensions-not-found/ 4136773#4136773 – ssilas777

回答

44

在你的文件的頂部添加此using System.Web.Mvc.Html;

14

確保您的web.config文件中包含擴展類的名稱空間。例如:

namespace MyProject.Extensions 
{ 
    public static class LinkExtensions 
    { 
     //code 
    } 
} 

在您的網站的Web.config和/或Web.config文件位於你的「意見」的文件夾:

<system.web> 
    <pages> 
     <namespaces> 
     <add namespace="MyProject.Extensions" /> 
     </namespaces> 
    </pages> 
    </system.web> 

否則包括頂部的命名空間的「使用」塊你的視圖頁面可以工作,但對於常見的命名空間,我會做上述。

ASPX:

<%@ Import namespace="MyProject.Extensions" %> 

RAZOR:

@using MyProject.Extensions 
+0

最終,這個答案的web.config部分是我錯過了。 –

5

確保您使用在類文件如下:

using System.Web.Mvc.Html; 

這是必須的,因爲HtmlHelper類位於System.Web.Mvc命名空間,但在ActionLink擴展方法位於System.Web.Mvc.Html命名空間。

+0

良好的通話,這是包含在股票web.config,但誰知道在這種情況下,這是否正確 –

+0

@JohnCulviner訣竅是,問題是不精確的錯誤發生的地方。如果是View,那麼你的答案是正確的(View沒有看到名字空間,所以它需要被添加到web.config中)。如果錯誤來自擴展類,那麼它在擴展類文件中使用指令(web.config在這裏沒有幫助)。我在這裏猜測,基於錯誤提到'ActionLink'而不是'MyActionLink'方法 - 我們需要等待作者澄清(希望他會回來)。 – tpeczek

相關問題