在asp.net mvc中的redirecttoaction中设置查询字符串

时间:2012-08-29 14:33:34

标签: asp.net-mvc asp.net-mvc-routing query-string redirecttoaction

我必须在asp.net mvc视图中使用不同的参数进行redirecttoaction调用,从视图的引用页面(网格状态)中提取。

我(在隐藏字段中)查询字符串的内容(有时是空的,有时带有2个参数等等),所以我在创建路径值数组时遇到了问题。

是否有一些助手,帮助我将查询字符串转换为路由值数组? 类似的东西:

string querystring ="sortdir=asc&pag=5";
return RedirectToAction( "Index", ConvertToRouteArray(querystring));

2 个答案:

答案 0 :(得分:9)

要创建通用解决方案,请将查询字符串转换为字典,并将字典转换为RouteValueDictionary。

var parsed = HttpUtility.ParseQueryString(temp); 
Dictionary<string,object> querystringDic = parsed.AllKeys
    .ToDictionary(k => k, k => (object)parsed[k]); 

return RedirectToAction("Index", new RouteValueDictionary(querystringDic)); 

答案 1 :(得分:2)

使用RedirectToAction("actionName", {object with properties})的一个限制是RedirectToAction()没有接受RedirectToAction(ActionResult(), {object with properties})的重载,所以你被迫使用魔术字符串作为动作名称(可能还有控制器名称)。

如果您使用T4MVC library,它包含两个流畅的API辅助方法(AddRouteValue(...)AddRouteValues(...)),使您可以轻松添加单个查询字符串参数,对象的所有属性,或者整个Request.QueryString。您可以在T4MVC自己的ActionResult对象上调用这些方法,也可以直接在RedirectToAction()方法上调用这些方法。当然,T4MVC就是要摆脱魔法弦!

作为示例:假设您要重定向到未经身份验证的请求的登录页面,并将最初请求的URL作为查询字符串参数传递,以便您可以在成功登录后跳转到该位置。以下语法示例中的任何一个都可以使用:

return RedirectToAction(MVC.Account.LogOn()).AddRouteValue(@"returnUrl", HttpUtility.UrlEncode(Request.RawUrl));

return RedirectToAction(MVC.Account.LogOn().AddRouteValue(@"returnUrl", HttpUtility.UrlEncode(Request.RawUrl)));