我必须在asp.net mvc视图中使用不同的参数进行redirecttoaction
调用,从视图的引用页面(网格状态)中提取。
我(在隐藏字段中)查询字符串的内容(有时是空的,有时带有2个参数等等),所以我在创建路径值数组时遇到了问题。
是否有一些助手,帮助我将查询字符串转换为路由值数组? 类似的东西:
string querystring ="sortdir=asc&pag=5";
return RedirectToAction( "Index", ConvertToRouteArray(querystring));
答案 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)));