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

Posted by SztupY on Stack Overflow See other posts from Stack Overflow or by SztupY
Published on 2010-04-14T22:23:32Z Indexed on 2010/04/15 1:23 UTC
Read the original article Hit count: 451

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:

  1. Create a new RouteValueDictionary and fill it with everything from RouteData.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
  2. Add everything from HttpContext.Request.QueryString to 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)
  3. Use HttpContext.Request.Params
    • Problem: this has too much junk data which imho one shouldn't add to a RouteValueDictionary that is passed to an ActionLink

So the questions:

  1. Is there an RVD that has all the data that was passed to the Controller and was used by it?
  2. 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)?
  3. Is there a way to filter out the "junk" data from the Params object?

© Stack Overflow or respective owner

Related posts about c#

Related posts about asp.net-mvc