2012-10-02 11 views
22

Ich möchte Gewohnheit verwenden @ Html.ActionLinkSystem.Web.Mvc.HtmlHelper‘enthält keine Definition für 'Action'

Ich versuche, den folgenden Code zu verwenden: -

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); 
    } 
} 

Von Custom ActionLink helper that knows what page you're on

Aber ich bin

System.Web.Mvc.HtmlHelper‘enthält keine Definition für immer 'ActionLink' und keine Erweiterungsmethode 'ActionLink', die ein erstes Argument vom Typ 'System.Web.Mvc.HtmlHelper' akzeptiert, wurden gefunden (fehlt eine using-Direktive oder eine Assembly-Referenz?

+2

Wenn Sie sicher sind, dass Sie Namespace in Ihrer Konfiguration hinzugefügt haben, müssen Sie die Datei möglicherweise schließen und erneut öffnen - überprüfen Sie diese Antwort http://stackoverflow.com/questions/4136703/razor-htmlhelper-extensions-not-found/ 4136773 # 4136773 – ssilas777

Antwort

44

Dieses using System.Web.Mvc.Html; am Anfang Ihrer Datei

14

Stellen Sie sicher, dass der Namespace für Ihre Erweiterungsklasse in Ihrer web.config enthalten ist. Zum Beispiel:

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

In Ihrer Website Web.config und/oder Web.config in Ihren "Views" Ordnern:

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

umfassen Ansonsten einen "mit" Block für den Namespace an der Spitze Ihrer Ansichtsseite kann funktionieren, aber für allgemeine Namespaces würde ich das obige tun.

ASPX:

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

RAZOR:

@using MyProject.Extensions 
+0

Letztendlich fehlt mir der web.config Teil dieser Antwort. –

5

Vergewissern Sie sich, dass Sie in Ihrer Klassendatei folgende Verwendung:

using System.Web.Mvc.Html; 

Dies ist erforderlich, da sich die HtmlHelper-Klasse im Namespace System.Web.Mvc befindet, sich jedoch die Erweiterungsmethode ActionLink im Namespace System.Web.Mvc.Html befindet.

+0

guten Anruf, das ist in der Aktie web.config aber wer weiß, ob das in diesem Fall richtig ist –

+0

@ JohnCulviner Der Trick ist, dass die Frage nicht genau ist, wo der Fehler stattfindet. Wenn es sich um die Ansicht handelt, ist Ihre Antwort korrekt (View zeigt den Namespace nicht an, daher muss er in web.config hinzugefügt werden). Wenn der Fehler von der Extension-Klasse kommt, verwendet er Direktive in der Extension-Class-Datei (web.config wird hier nicht helfen). Ich vermute, dass hier ein Fehler über die ActionLink- und nicht über die MyActionLink-Methode spricht - wir müssen warten, bis der Autor geklärt hat (hoffentlich kommt er zurück). – tpeczek

Verwandte Themen