【问题标题】:setting query string in redirecttoaction in asp.net mvc在asp.net mvc的redirecttoaction中设置查询字符串
【发布时间】:2012-08-24 04:59:42
【问题描述】:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

要创建通用解决方案,请将您的查询字符串转换为字典,并在字典中转换为 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)); 

【讨论】:

  • 这只是一个例子,问题是查询字符串在每次调用时都是可变的,即使在参数数量上也是如此,所以我想找到一个通用的解决方案
  • 我将答案更改为通用解决方案。
  • 忘记了新的:return RedirectToAction("Index", new RouteValueDictionary(querystringDic));
  • 谢谢,我写的最终工作代码是: var parsed = HttpUtility.ParseQueryString(temp); Dictionary querystringDic = parsed.AllKeys.ToDictionary(k => k, k => (object)parsed[k]); return RedirectToAction("DirectUpdate", new RouteValueDictionary(querystringDic));导致 col[k] 在采样中未定义我将解析结果保存在变量中,但要确保调用了正确的 RedirectToAction 构造函数,我必须确保传递了 Dictionary,否则通用对象构造函数是二手
  • 太棒了。谢谢你欧文
【解决方案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)));

【讨论】:

    猜你喜欢
    • 2016-08-25
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多