2010-02-14 113 views
1

我試圖將路由值發送給某個方法,但我似乎無法弄清楚這一點。這裏是我的代碼如何在HTML動作鏈接中動態創建路由

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

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

下面的代碼會產生這樣的

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

上的網址應該是這樣的

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

我是什麼,因爲在缺少

回答

2

'new {...}'表達式的上下文's'不對應於它可能首先出現的變量 - 它定義創建的匿名類成員的名稱。

當你說:

新{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

OK ..我試過了代碼,但它生成了一個像這樣的鏈接: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

哦,是的..我逐字拷貝了代碼並試了一下。但它給了我以上的網址 – Luke101