2010-02-14 5 views
1

J'essaye d'envoyer les valeurs de route à une méthode mais je n'arrive pas à comprendre cela. Voici mon codeComment créer dynamiquement des routes dans un lien d'action HTML

<% string s = "cool"; 
    object d = new { s = "1" }; 

     %> 
<%= Html.ActionLink("Home", "Index", d, "ql")%> 

Le code suivant produit une URL comme celui-ci

http://localhost:49450/?s=1 

l'URL doit être comme ça

http://localhost:49450/?cool=1 

Qu'est-ce que je manque

Répondre

2

parce que dans le contexte d'une expression 'new {...}' le 's' ne correspond pas à une variable telle qu'elle peut apparaître définit le nom d'un membre d'une classe anonyme créée.

quand vous dites:

nouveau {S} = 123

vous générez en fait une classe, ce qui est anonyme (vous ne pouvez voir le nom de la classe). Le type de chaque membre de la classe est implicitement déterminé par tout ce que vous lui attribuez. Dans l'exemple ci-dessus quelque chose de classe comme celui-ci est généré

class AnonymousClass_S483Ks4 { 
public int S {get;set;} 
} 

Il y a deux façons que vous pouvez faire ce que vous voulez:

1) vous auriez à dire:

new { cool = 123 } 

2) Maintenant, je suppose que vous voulez que le nom soit dynamique, donc vous devez utiliser RouteValueDictionary qui vous permet de mettre des paires valeur/clé.

 // RouteValueDictionary is IDictionary<string, object> 
     var dictionary = new RouteValueDictionary(); 
     string s = "cool"; 
     dictionary.Add(s, 123); 
     htmlHelper.ActionLink("Home", "Index", dictionary); 

Comme vous pouvez le voir, vous pouvez utiliser ici une variable 's' pour représenter ce que vous voulez. Cela devrait vous donner l'URL dont vous avez besoin.

+1

OK..J'ai essayé le code mais il a généré un lien comme celui-ci http: // localhost: 49450 /? Count = 1 & Keys = System.Collections.Generic.Dictionary% 602% 2BKeyCollection% 5BSystem.String% 2CSystem.Object % 5D & Values ​​= System.Collections.Generic.Dictionary% 602% 2BValueCollection% 5BSystem.String% 2CSystem.Object% 5D – Luke101

+0

@ luke101 basé sur votre code d'origine faites-vous éventuellement 'object dictionary = new RouteValueDictionary()' vous devez vous assurer l'objet que vous passez à ActionLink() est de type RouteValueDictionary –

+0

oh oui..J'ai copié le code verbatim et l'ai essayé. Mais il a donné l'URL ci-dessus – Luke101

Questions connexes