2011-09-28 88 views
0

我有一個MVC2項目,我希望默認路由將查詢參數傳遞給默認操作。如何在MVC默認路由上傳遞查詢參數?

現在我有這樣的

routes.MapRoute(
    "Default", // Route name 
    "", // URL pattern 
    new { controller = "Search", action = "Index" } 
); 

的路線。如果我現在去http://mysite,就是正確地路由到搜索控制器上的索引操作,但如果進入http://mysite?theme=yellow,那麼theme參數不傳遞給同一個動作。

如何創建傳遞給定查詢參數的默認路由?

+0

這聽起來不對。 'http:// mysite?theme = yellow'應該解析爲默認控制器並傳遞查詢字符串,但不應該將瀏覽器中的url更改爲'http:// mysite/Search/Index?theme = yellow' 。你確定你沒有重定向代碼,RedirectToAction調用等? –

+0

好吧,我可能在那裏錯誤地表達了自己的錯誤 - 它沒有被重定向,它的ROUTED被搜索控制器和索引操作。我正在改變這個問題。 – Nilzor

回答

1

路由與查詢參數無關。他們將可以從與url模式相匹配的控制器訪問。

所以,"{controller}/{action}/{id}", // URL pattern應該足夠

,並在控制器,你可以得到通過請求屬性查詢參數:

var theme = Request["theme"]; 

,或者如果你願意,你可以明確到:

var theme = Request.QueryString["theme"]; 
+0

不,他們不是。調試器中的'Request.QueryString = {}'當我在瀏覽器的URL字段中鍵入'http:// mysite?theme = yellow'後,在Index行爲的第1行設置斷點。 – Nilzor

+0

這可能是MVC2與MVC3的區別嗎? PS:我也嘗試過你的URL模式,但沒有成功。 – Nilzor

+0

這很奇怪,我剛剛測試了你的代碼,它適用於我。在那個斷點上,Request.RawUrl說什麼? –