Hi!
I was wondering whether there is a way to create an ActionLink or similar, that changes only a few parameters of the actual query, and keeps all the other parameters intact. For example if I'm on an URL like http://example.com/Posts/Index?Page=5&OrderBy=Name&OrderDesc=True I want to change only the Page, or OrderBy parameter and keep all other parameters the same, even those I don't yet know of (like when I want to add a Search parameter or something similar too).
The header of my current action looks like this:
public ActionResult Index(int? Page, string OrderBy, bool? Desc)
and I'm only interested in the values that this controller "eats". I want however that when I extend this action (for example with a string Search parameter) the links should work the same way as before.
Here is what I did already:
- Create a new 
RouteValueDictionaryand fill it with everything fromRouteData.Values- Problem: This only fills the parameters that are used in the Routing, so all other optional parameters (like 
Page) to the controller are lost 
 - Problem: This only fills the parameters that are used in the Routing, so all other optional parameters (like 
 - Add everything from 
HttpContext.Request.QueryStringto the previous dictionary- This is what I am currently using
 - Problem: It might have some junk stuff, that the Controller didn`t ask for, and it doesn't work if the page was loaded using POST. You also don't have any ModelBindings (but this isn't much of a problem, because we are re-sending everything anyway)
 
 - Use 
HttpContext.Request.Params- Problem: this has too much junk data which imho one shouldn't add to a 
RouteValueDictionarythat is passed to anActionLink 
 - Problem: this has too much junk data which imho one shouldn't add to a 
 
So the questions:
- Is there an 
RVDthat has all the data that was passed to the Controller and was used by it? - Is this solution good, or are there any caveats I didn't think about (mainly in the context of changing a few query parameters while keeping the others intact)?
 - Is there a way to filter out the "junk" data from the 
Paramsobject? 
EDIT: Checked the RouteData.DataTokens variable, but it's usually empty, and doesn't contain everything I need. It seems to only contain parameters that are needed for the routing somewhere, but not all of the parameters.