2010-04-14 59 views
2

我想知道是否有創建方式的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參數),鏈接應該像以前一樣工作。

這裏是我做的已經:

  1. 創建一個新的RouteValueDictionaryRouteData.Values
    • 問題應有盡有它:這只是填補了在路由使用的參數,因此所有其他可選參數(如Page)到控制器丟失
  2. 將所有內容從HttpContext.Request.QueryString添加到以前的字典
    • 這是我目前使用的
    • 問題:它可能有一些垃圾的東西,該控制器didn`t要求,如果頁面使用POST加載它不工作。您還沒有任何ModelBindings(但這不是太大的問題,因爲我們正在重新發送反正一切)
  3. 使用HttpContext.Request.Params
    • 問題:這有太多的垃圾數據,恕我直言,一個人不應該添加到被傳遞到ActionLink

於是問題一個RouteValueDictionary

  1. 是否有一個RVD具有傳遞給控制器​​,並使用它的所有數據?
  2. 這是解決方案好,還是有我也沒多想什麼注意事項(主要是改變一些查詢參數,同時保持其他不變的情況下)?
  3. 有沒有辦法過濾掉Params對象中的「垃圾」數據?

編輯:檢查了RouteData.DataTokens變量,但它通常是空的,並且不包含我需要的所有東西。它似乎只包含某個地方路由所需的參數,但不包含所有參數。

+1

你有沒有在'RouteData.DataTokens'字典看?他們可能在那裏...如果他們是我會重新發布爲答案。 – Charlino 2010-04-14 22:55:39

+0

@Charlino:那就是他們應該去的地方。 http://msdn.microsoft.com/en-us/library/system.web.routing.routedata.datatokens.aspx – 2010-04-15 00:48:56

+0

是的,這就是我的想法。有趣的是,你在DataTokens中發現'area',因爲我會認爲它被用來找到匹配的路線。 – Charlino 2010-04-15 01:22:50

回答

-1

有在RouteData.DataTokens看看。

RouteData.DataTokens @ MSDN documentation

獲取傳遞給路由處理,但是當ASP.NET路由決定路徑是否符合要求,不使用自定義的值的集合。

HTHS,
查爾斯

+0

對我來說Viewcontext.RouteData.DataTokens屬性是空的(Count == 0),除非我定義了需要我提供的一些信息的路由,但這不是我的觀點。似乎這些參數不會傳遞給路由處理程序。 – SztupY 2010-04-15 10:03:21

+0

這仍然給我的問題。我有一個URL,如Source?investigationKey = 2。從RouteData.Values我只能得到控制器和操作。我沒有在任何地方獲得「調查密鑰」。 有沒有人找出如何得到這個? – ntombela 2010-05-08 00:47:28