我正在使用该方法构建一个url:
Url.Action("action", "controller");
Run Code Online (Sandbox Code Playgroud)
我喜欢将当前请求的查询字符串传递给该URL.像下面的东西(但它不起作用):
Url.Action("action", "controller", Request.QueryString);
Run Code Online (Sandbox Code Playgroud)
可以使用以下扩展名将QueryString转换为routevalues:
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;
}
Run Code Online (Sandbox Code Playgroud)
使用扩展方法,以下工作正常:
Url.Action("action", "controller", Request.QueryString.ToRouteValues());
Run Code Online (Sandbox Code Playgroud)
还有其他更好的方法吗?谢谢
pwh*_*e23 33
如果您希望能够轻松地将其他路由值参数添加到Url.Action,请尝试使用此扩展方法(基于Linefeed),该方法接受匿名对象并返回RouteValueCollection:
public static RouteValueDictionary ToRouteValues(this NameValueCollection col, Object obj)
{
var values = new RouteValueDictionary(obj);
if (col != null)
{
foreach (string key in col)
{
//values passed in object override those already in collection
if (key != null && !values.ContainsKey(key)) values[key] = col[key];
}
}
return values;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
Url.Action("action", "controller", Request.QueryString.ToRouteValues(new{ id=0 }));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23405 次 |
| 最近记录: |