我想知道是否有創建方式的ActionLink
或類似的,改變只有實際查詢的一些參數,並保持所有其它參數不變。例如,如果我像http://example.com/Posts/Index?Page=5&OrderBy=Name&OrderDesc=True
我想只改變Page
,或者OrderBy
參數,並保持所有其他參數相同的URL,即使是那些我還不知道的(比如當我想添加一個Search
參數或也有類似的東西)。如何獲得在ASP.NET MVC所有活動參數(2)
我目前的行動的頭看起來是這樣的:
public ActionResult Index(int? Page, string OrderBy, bool? Desc)
,我只在值感興趣,這種控制器「吃」。然而,我想要當我擴展這個動作時(例如用string Search
參數),鏈接應該像以前一樣工作。
這裏是我做的已經:
- 創建一個新的
RouteValueDictionary
和RouteData.Values
- 問題應有盡有它:這只是填補了在路由使用的參數,因此所有其他可選參數(如
Page
)到控制器丟失
- 問題應有盡有它:這只是填補了在路由使用的參數,因此所有其他可選參數(如
- 將所有內容從
HttpContext.Request.QueryString
添加到以前的字典- 這是我目前使用的
- 問題:它可能有一些垃圾的東西,該控制器didn`t要求,如果頁面使用POST加載它不工作。您還沒有任何ModelBindings(但這不是太大的問題,因爲我們正在重新發送反正一切)
- 使用
HttpContext.Request.Params
- 問題:這有太多的垃圾數據,恕我直言,一個人不應該添加到被傳遞到
ActionLink
- 問題:這有太多的垃圾數據,恕我直言,一個人不應該添加到被傳遞到
於是問題一個RouteValueDictionary
:
- 是否有一個
RVD
具有傳遞給控制器,並使用它的所有數據? - 這是解決方案好,還是有我也沒多想什麼注意事項(主要是改變一些查詢參數,同時保持其他不變的情況下)?
- 有沒有辦法過濾掉
Params
對象中的「垃圾」數據?
編輯:檢查了RouteData.DataTokens
變量,但它通常是空的,並且不包含我需要的所有東西。它似乎只包含某個地方路由所需的參數,但不包含所有參數。
你有沒有在'RouteData.DataTokens'字典看?他們可能在那裏...如果他們是我會重新發布爲答案。 – Charlino 2010-04-14 22:55:39
@Charlino:那就是他們應該去的地方。 http://msdn.microsoft.com/en-us/library/system.web.routing.routedata.datatokens.aspx – 2010-04-15 00:48:56
是的,這就是我的想法。有趣的是,你在DataTokens中發現'area',因爲我會認爲它被用來找到匹配的路線。 – Charlino 2010-04-15 01:22:50