web-dev-qa-db-fra.com

System.Web.Mvc.HtmlHelper 'ne contient pas de définition pour' ActionLink '

Je souhaite utiliser @ Html.ActionLink personnalisé

J'essaie d'utiliser le code suivant: -

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

De assistant ActionLink personnalisé qui sait sur quelle page vous vous trouvez

Mais je reçois

System.Web.Mvc.HtmlHelper 'ne contient pas de définition pour' ActionLink 'et aucune méthode d'extension' ActionLink 'acceptant un premier argument de type' System.Web.Mvc.HtmlHelper 'n'a pu être trouvée (manque-t-il une directive ou une référence d'assemblage?

25
Mohit Kumar

Ajoute ça using System.Web.Mvc.Html; en haut de votre fichier

48
krolik

Assurez-vous que l'espace de noms de votre classe d'extensions est inclus dans votre web.config. Par exemple:

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

Dans votre site Web.config et/ou Web.config situé dans votre dossier "Vues":

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

Sinon, inclure un bloc "using" pour l'espace de noms en haut de votre page d'affichage peut fonctionner mais pour les espaces de noms courants, je ferais ce qui précède.

ASPX:

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

RASOIR:

@using MyProject.Extensions
16
John Culviner

Assurez-vous que vous avez l'utilisation suivante dans votre fichier de classe:

using System.Web.Mvc.Html;

Cela est nécessaire car la classe HtmlHelper se trouve dans System.Web.Mvc espace de noms mais la méthode d'extension ActionLink se trouve dans System.Web.Mvc.Html espace de noms.

6
tpeczek

Si vous utilisez nopcommerce, ajoutez cette instruction using en haut de votre fichier de vue.

@using Nop.Web.Framework.UI
2
chris c

Mon problème était, j'avais une syntaxe incomplète, "@ Html.actionLink", dans une vue. On dirait que j'avais commencé à ajouter un lien d'action et que je suis allé dans une direction différente mais j'ai oublié de supprimer le lien d'action partiel, cela a provoqué la même erreur que ci-dessus .... Vérifiez donc votre syntaxe car cela générera la même erreur d'exécution. Bonne chance!

0
Al Nolan