簡體   English   中英

如何在ASP.NET MVC中獲取所有活動參數(二)

[英]How to get all active parameters in ASP.NET MVC (2)

我想知道是否有一種方法可以創建一個ActionLink或類似的方法,該方法僅更改實際查詢的幾個參數,並使所有其他參數保持不變。 例如,如果我使用的網址為http://example.com/Posts/Index?Page=5&OrderBy=Name&OrderDesc=True我只想更改PageOrderBy參數,並保持所有其他參數不變,即使那些我還不知道(例如,當我想添加Search參數或類似的東西時)。

我當前操作的標題如下:

public ActionResult Index(int? Page, string OrderBy, bool? Desc)

我只對這個控制器“吃掉”的值感興趣。 但是,我希望當我擴展此操作(例如,使用string Search參數)時,鏈接的工作方式應與以前相同。

這是我已經做過的:

  1. 創建一個新的RouteValueDictionary並用RouteData.Values所有內容填充它
    • 問題:這僅填充了路由中使用的參數,因此控制器的所有其他可選參數(如Page )都丟失了
  2. HttpContext.Request.QueryString所有內容添加到上一詞典
    • 這是我目前正在使用的
    • 問題:可能有一些垃圾內容,Controller並沒有要求,如果使用POST加載了頁面則無法正常工作。 您也沒有任何ModelBindings(但這不是什么大問題,因為無論如何我們都會重新發送所有內容)
  3. 使用HttpContext.Request.Params
    • 問題:這有太多垃圾數據,恕我直言,不應將這些數據添加到傳遞給ActionLinkRouteValueDictionary

所以問題是:

  1. 是否有一個RVD ,具有所有傳遞到控制器並由其使用的數據?
  2. 這個解決方案好嗎,還是我沒有想到的警告(主要是在更改一些查詢參數的同時保持其他參數不變)?
  3. 有沒有辦法從Params對象中過濾掉“垃圾”數據?

編輯:檢查RouteData.DataTokens變量,但是它通常為空,並且不包含我需要的所有內容。 它似乎只包含某處路由所需的參數,而不是所有參數。

看看RouteData.DataTokens

RouteData.DataTokens @ MSDN文檔

獲取傳遞給路由處理程序但在ASP.NET路由確定路由是否與請求匹配時不使用的自定義值的集合。

HTH,
查爾斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM