2010-02-14 1 views
1

Я пытаюсь отправить значения маршрута методу, но я не могу понять это. Вот мой кодКак динамически создавать маршруты в HTML-соединении ссылок

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

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

Следующий код создает URL, как этот

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

URL-адрес должен быть как этот

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

Что я отсутствующий

ответ

2

потому, что в контекст выражения 'new {...}': 's' не соответствует переменной, как она может появиться сначала - it определяет имя члена анонимного класса, который создается.

, когда вы говорите:

новый {S = 123}

вы на самом деле генерации класса, который является анонимным (вы никогда не получите, чтобы увидеть название класса). Тип каждого члена класса неявно определяется тем, что вы ему назначаете. В приведенном выше примере класс что-то вроде этого генерируется

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

Есть два способа вы можете сделать то, что вы хотите:

1) вы должны сказать:

new { cool = 123 } 

2) Теперь я предполагаю, что вы хотите, чтобы имя было динамическим, поэтому вам необходимо использовать RouteValueDictionary, который позволяет вводить пары значений ключа.

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

Как вы можете видеть, здесь вы можете использовать переменную 's' для представления того, что вы хотите. Это должно дать вам URL-адрес, который вам нужен.

+1

ОК .. Я пробовал код, но он сгенерировал ссылку вроде этого 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 на основе вашего исходного кода вы, возможно, используете «object dictionary = new RouteValueDictionary()», вам нужно убедиться объект, который вы передаете ActionLink(), имеет тип RouteValueDictionary –

+0

oh yes..I скопировал код дословно и попробовал его. Но он дал URL-адрес выше – Luke101