如何在ASP.NET MVC中获取所有活动参数(2)

时间:2010-04-14 22:23:33

标签: c# asp.net-mvc parameters routing asp.net-mvc-routing

我想知道是否有办法创建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中的所有内容添加到上一个字典中
    • 这就是我目前使用的
    • 问题:它可能有一些垃圾内容,控制器没有要求,如果页面是使用POST加载的,它就不起作用。你也没有任何ModelBindings(但这不是什么大问题,因为无论如何我们都在重新发送一切)。
  3. 使用HttpContext.Request.Params
    • 问题:这有太多的垃圾数据,不应该添加到传递给RouteValueDictionary的{​​{1}}
  4. 所以问题:

    1. 是否有ActionLink包含传递给Controller并被其使用的所有数据?
    2. 这个解决方案是否合适,或者是否有任何我没有想过的警告(主要是在更改一些查询参数同时保持其他查询参数不变的情况下)?
    3. 有没有办法过滤掉RVD对象中的“垃圾”数据?
    4. 编辑:检查Params变量,但它通常是空的,并不包含我需要的所有内容。它似乎只包含某处路由所需的参数,但不包含所有参数。

1 个答案:

答案 0 :(得分:-1)

查看RouteData.DataTokens

RouteData.DataTokens @ MSDN documentation

  

获取传递给路由处理程序的自定义值的集合,但在ASP.NET路由确定路由是否与请求匹配时不使用。

HTHS,
查尔斯