我想知道是否有创建方式的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
参数),链接应该像以前一样工作。
这里是我做的已经:
- 创建一个新的
RouteValueDictionary
和RouteData.Values
- 问题应有尽有它:这只是填补了在路由使用的参数,因此所有其他可选参数(如
Page
)到控制器丢失
- 问题应有尽有它:这只是填补了在路由使用的参数,因此所有其他可选参数(如
- 将所有内容从
HttpContext.Request.QueryString
添加到以前的字典- 这是我目前使用的
- 问题:它可能有一些垃圾的东西,该控制器didn`t要求,如果页面使用POST加载它不工作。您还没有任何ModelBindings(但这不是太大的问题,因为我们正在重新发送反正一切)
- 使用
HttpContext.Request.Params
- 问题:这有太多的垃圾数据,恕我直言,一个人不应该添加到被传递到
ActionLink
- 问题:这有太多的垃圾数据,恕我直言,一个人不应该添加到被传递到
于是问题一个RouteValueDictionary
:
- 是否有一个
RVD
具有传递给控制器,并使用它的所有数据? - 这是解决方案好,还是有我也没多想什么注意事项(主要是改变一些查询参数,同时保持其他不变的情况下)?
- 有没有办法过滤掉
Params
对象中的“垃圾”数据?
编辑:检查了RouteData.DataTokens
变量,但它通常是空的,并且不包含我需要的所有东西。它似乎只包含某个地方路由所需的参数,但不包含所有参数。
你有没有在'RouteData.DataTokens'字典看?他们可能在那里...如果他们是我会重新发布为答案。 – Charlino 2010-04-14 22:55:39
@Charlino:那就是他们应该去的地方。 http://msdn.microsoft.com/en-us/library/system.web.routing.routedata.datatokens.aspx – 2010-04-15 00:48:56
是的,这就是我的想法。有趣的是,你在DataTokens中发现'area',因为我会认为它被用来找到匹配的路线。 – Charlino 2010-04-15 01:22:50