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:
- Create a new
RouteValueDictionary
and 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.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)
- Use
HttpContext.Request.Params
- Problem: this has too much junk data which imho one shouldn't add to a
RouteValueDictionary
that 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
RVD
that 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
Params
object?
© Stack Overflow or respective owner