【发布时间】:2011-04-28 11:46:30
【问题描述】:
我正在使用方法构建一个url:
Url.Action("action", "controller");
我也喜欢将当前请求的查询字符串传递到该 url。 类似于以下内容(但它不起作用):
Url.Action("action", "controller", Request.QueryString);
使用以下扩展可以将 QueryString 转换为路由值:
public static RouteValueDictionary ToRouteValues(this NameValueCollection queryString)
{
if (queryString.IsNull() || queryString.HasKeys() == false) return new RouteValueDictionary();
var routeValues = new RouteValueDictionary();
foreach (string key in queryString.AllKeys)
routeValues.Add(key, queryString[key]);
return routeValues;
}
使用扩展方法,以下确实有效:
Url.Action("action", "controller", Request.QueryString.ToRouteValues());
还有其他更好的方法吗? 谢谢
【问题讨论】:
-
如果查询字符串包含具有相同键的两个键/值,这将引发异常,这总是有可能的,因为有人可以在他们的浏览器中更改查询字符串
-
谢谢,这个问题真的很有帮助!
querystring.IsNull()是什么?是自定义扩展吗?因为我在任何地方都看不到它。
标签: asp.net-mvc-3