68 votes

Comment passer un paramètre de chaîne de requête dans un ActionLink en MVC ?

J'ai le lien d'action suivant :

<%= Html.ActionLink("Check this", "Edit", "test", 
                     new { id = id }, new { style = "display:block" })%>

Comment puis-je inclure data=name comme chaîne de requête. Quelque chose comme ça :

link?data=name

111voto

PanJanek Points 3764

4ème paramètre de Html.ActionLink peut avoir un nombre quelconque de propriétés :

<%= Html.ActionLink("Check this", "Edit", "test", 
                     new { id = id, data=name }, new { style = "display:block" })%>

Ces propriétés sont insérées dans l'URL en fonction du routage, mais si le nom de la propriété ne peut être associé à aucune route, il est ajouté comme paramètre GET de l'URL.

Donc si vous avez un itinéraire standard {controller}/{action}/{id} vous obtiendrez l'URL :

test/Edit/[id]?data=[name] 

du code ci-dessus.

55 votes

Je veux juste ajouter que si vous omettez le dernier paramètre (les attributs HTML), MVC 3 pensera que le dernier paramètre contient les attributs HTML. N'oubliez donc pas un nouveau { } vide comme dernier paramètre si vous n'avez pas d'attributs HTML à définir.

6 votes

Au lieu de mettre des {} vides pour le quatrième paramètre, nous pouvons utiliser null.

1 votes

Dans razor, vous avez besoin de guillemets, comme ceci : new { id = id, data="name" }

5voto

Sanam Tiwari Points 41

Passer la chaîne de requête de cette façon

@Html.ActionLink("Delete Record", "Home", "Delete", new { id=Id},null)

Par le code ci-dessus vous obtiendrez l'url comme (Supposons Id=1) : /Home/Delete/1

et si vous voulez ajouter plus de paramètres à la chaîne de requête alors :

@Html.ActionLink("Delete Record", "Home", "Delete", new { id=Id, Name=name},null)

Par le code ci-dessus vous obtiendrez l'url comme (Supposons Id=1 et Name=India) :

/Home/Delete/1?Name=India

3voto

Harry Binnendyk Points 121

J'en ai eu assez de me taper la tête contre un mur avec le html.actionlink. Il fonctionne très bien quand on veut simplement le router contre des appels de routage simples, mais refuse absolument de coopérer quand on veut ajouter une simple chaîne de recherche à la fin.

Je ne veux pas d'ID à la fin, je veux pouvoir ajouter une sorte de chaîne de recherche réelle avec le " ?".

Ainsi, chaque fois que j'ai eu besoin d'une chaîne de recherche, j'ai utilisé url.action à l'intérieur de la balise d'ancrage.

<a href='@url.action("Action","route")?Parameter=Value' >Text for Link Name</a>

Au moins, cela fonctionne et je peux arrêter de me donner des maux de tête pour quelque chose qui aurait dû être une tâche très simple. Il faut que quelqu'un sorte la tête de ses fesses et fasse en sorte que l'ActionLink fonctionne correctement pour les querystrings dans le routage MVC.

1voto

Oleg Karasik Points 770

Je sais que c'est une vieille question, mais

Dans le cas où le code ci-dessous ne génère pas le fichier <a href="http://stackoverflow.com/?param=value" /> .

<%= Html.ActionLink("Text", "Action", "Controller", new { param=value }, null)%>

Je vous conseille de vérifier si votre action a au moins une [Route] (j'ai utilisé l'attribut [Route("/")] par exemple).

J'espère que cela vous aidera.

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