6

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

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

是否有一些助手可以帮助我将查询字符串转换为路由值数组?就像是:

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

2 回答 2

10

要创建通用解决方案,请将您的查询字符串转换为字典,并在字典中转换为 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)); 
于 2012-08-29T14:38:12.177 回答
2

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

如果您使用T4MVC 库,它包含两个流畅的 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)));
于 2013-01-10T20:10:03.113 回答