260 votes

HTML. ActionLink, méthode

Disons que j’ai une classe

Sur une page qui n’est pas située dans le dossier de l’élément, où réside, je veux créer un lien vers le méthode. Donc qui `` méthode je dois utiliser et quels paramètres dois-je passer ?

Plus précisément, je suis à la recherche pour le remplacement de la méthode

qui a été retiré dans l’incarnation récente d’ASP.NET MVC.

506voto

Joseph Kingry Points 4594

Je pense que ce que vous voulez, c'est ceci:

ASP.NET MVC1

Html.ActionLink(article.Title, 
                "Login",  // <-- Controller Name.
                "Item",   // <-- ActionMethod
                new { id = article.ArticleID }, // <-- Route arguments.
                null  // <-- htmlArguments .. which are none. You need this value
                      //     otherwise you call the WRONG method ...
                      //     (refer to comments, below).
                )

Il utilise la méthode suivante ActionLink signature:

public static string ActionLink(this HtmlHelper htmlHelper, 
                                string linkText,
                                string controllerName,
                                string actionName,
                                object values, 
                                object htmlAttributes)

ASP.NET MVC2

deux arguments ont été inversées

Html.ActionLink(article.Title, 
                "Item",   // <-- ActionMethod
                "Login",  // <-- Controller Name.
                new { id = article.ArticleID }, // <-- Route arguments.
                null  // <-- htmlArguments .. which are none. You need this value
                      //     otherwise you call the WRONG method ...
                      //     (refer to comments, below).
                )

Il utilise la méthode suivante ActionLink signature:

public static string ActionLink(this HtmlHelper htmlHelper, 
                                string linkText,
                                string actionName,
                                string controllerName,
                                object values, 
                                object htmlAttributes)

ASP.NET MVC3+

les arguments sont dans le même ordre que MVC2, cependant la valeur de l'id n'est plus nécessaire:

Html.ActionLink(article.Title, 
                "Item",   // <-- ActionMethod
                "Login",  // <-- Controller Name.
                new { article.ArticleID }, // <-- Route arguments.
                null  // <-- htmlArguments .. which are none. You need this value
                      //     otherwise you call the WRONG method ...
                      //     (refer to comments, below).
                )

Cela évite de coder en dur toute la logique de routage dans le lien.

 <a href="http://stackoverflow.com/Item/Login/5">Title</a> 

Cela vous donnera la sortie html suivante, en supposant que:

  1. l'article.Title = "Titre"
  2. l'article.ArticleID = 5
  3. vous avez toujours la suite de l'itinéraire défini

. .

routes.MapRoute(
    "Default",     // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

30voto

Jeff Widmer Points 1964

Je voulais ajouter à la réponse de Joseph Kingry. Il a fourni la solution, mais au début je ne pouvait pas faire fonctionner soit et obtenu un résultat tout comme Adhip Gupta. Et puis j’ai réalisé que la route doit exister en premier lieu, et les paramètres doivent correspondre exactement à la route. J’ai donc dû un identifiant, puis un paramètre de texte pour mon itinéraire qui devait aussi être inclus aussi.

17voto

Haacked Points 31070

Vous pourriez vouloir regarder le `` méthode. Que l'on vous permet de spécifier tout (sauf le nom du lien texte et route) via un dictionnaire.

14voto

agez Points 347

Je pense que Joseph renversé de contrôleur et action. D’abord vient l’action puis le contrôleur. C’est un peu étrange, mais la façon dont la signature ressemble.

Juste pour clarifier les choses, c’est la version qui fonctionne (adaptation de l’exemple de Joseph) :

10voto

Adhip Gupta Points 3022
Html.ActionLink(article.Title, "Login/" + article.ArticleID, 'Item")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X