Disons que j'ai une classe
public class ItemController:Controller
{
public ActionResult Login(int id)
{
return View("Hi", id);
}
}
Sur une page qui ne se trouve pas dans le dossier Élément, où ItemController
réside, je souhaite créer un lien vers la Login
méthode. Alors, quelle Html.ActionLink
méthode dois-je utiliser et quels paramètres dois-je passer?
Plus précisément, je recherche le remplacement de la méthode
Html.ActionLink(article.Title,
new { controller = "Articles", action = "Details",
id = article.ArticleID })
qui a été retiré dans la récente incarnation ASP.NET MVC.
c#
.net
asp.net-mvc
html-helper
actionlink
Graviton
la source
la source
Réponses:
Je pense que ce que vous voulez c'est:
ASP.NET MVC1
Cela utilise la méthode ActionLink signature suivante:
ASP.NET MVC2
deux arguments ont été inversés
Cela utilise la méthode ActionLink signature suivante:
ASP.NET MVC3 +
les arguments sont dans le même ordre que MVC2, mais la valeur id n'est plus requise:
Cela évite de coder en dur toute logique de routage dans la liaison.
Cela vous donnera la sortie html suivante, en supposant:
article.Title = "Title"
article.ArticleID = 5
. .
la source
, null
paramètre APRÈS votrenew { ... }
... parce que si vous vérifiez les surcharges de cette méthode, c'est en pensant que vos paramètres sont htmlArguments ... pas acheminer les arguments. Pour utiliser la bonne méthode, vous devez utiliser la méthode qui arouteArguments, htmlArguments
.. il suffit donc de passer null pour ce dernierhtmlArgument
. Le premier morceau de code dans cette réponse l'a. J'ai mis à jour ce message pour que vous puissiez le voir facilement (c'est-à-dire qu'il ne défile pas).@Html.ActionLink("Text","Action","Controller", new { item.ID }, null)
Je voulais ajouter quelque chose à la réponse de Joseph Kingry . Il a fourni la solution, mais au début, je n'ai pas pu le faire fonctionner non plus et j'ai obtenu un résultat tout comme Adhip Gupta. Et puis j'ai réalisé que l'itinéraire doit exister en premier lieu et que les paramètres doivent correspondre exactement à l'itinéraire. J'ai donc eu un identifiant, puis un paramètre de texte pour mon itinéraire qui devait également être inclus.
la source
Vous voudrez peut-être regarder la
RouteLink()
méthode, celle-ci vous permet de tout spécifier (sauf le texte du lien et le nom de l'itinéraire) via un dictionnaire.la source
Je pense que Joseph a inversé le contrôleur et l'action. Vient d'abord l'action puis le contrôleur. C'est un peu étrange, mais à quoi ressemble la signature.
Juste pour clarifier les choses, voici la version qui fonctionne (adaptation de l'exemple de Joseph):
la source
Et ça
la source
la source
Si vous voulez aller à tous les pantalons fantaisie, voici comment vous pouvez l'étendre pour pouvoir le faire:
Vous devrez mettre ceci dans l'
System.Web.Mvc
espace de noms:Cela inclut deux remplacements pour
Route Values
etHTML Attributes
, également, toutes vos vues devraient être ajoutées:@using YourProject.Controllers
ou vous pouvez l'ajouter à votreweb.config <pages><namespaces>
la source
Utilisez des paramètres nommés pour plus de lisibilité et pour éviter les confusions.
la source
Avec MVC5, je l'ai fait comme ça et c'est 100% de code de travail ....
Vous pouvez vous faire une idée de ça ...
la source
Ce type utilise:
@ Html.ActionLink ("MainPage", "Index", "Home")
MainPage: Nom du texte Index: Action View Accueil: HomeController
Base Use ActionLink
la source