2014-12-24 2 views
0

Я разделил строку запроса с исходного URL и хочу передать ее после изменения Культуры приложения.Передача строки запроса в RedirectToAction MVC

Как передать строку запроса, которую я извлек в методе RedirectToAction.

public ActionResult Culture(string culture) 
     { 
      if (!string.IsNullOrEmpty(culture)) 
      { 
       this.Response.Cookies[PagingExtensions.COOKIE_NAME].Value = culture; 
      } 
spliturl.split(System.Web.HttpContext.Current.Request.UrlReferrer.ToString()); 
//this would return the controller name and action name and the query string as string value. 

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

     return RedirectToAction(spliturl.action, new RouteValueDictionary(querystringDic)); 

Могу ли я сделать что-то подобное, чтобы передать элемент управления в действие со следующей строкой запроса.

ответ

1

Это (я думаю) все, что вам нужно. Следующий код перенаправляет пользователя на другой контроллер/действие и т.д., как в соответствии с вашими потребностями (конечно, вы должны настроить его, как вам это нужно)

  string controller = RouteData.Values.ContainsKey("controller") ? RouteData.Values["controller"].ToString() : ""; 
     string action = RouteData.Values.ContainsKey("action") ? RouteData.Values["action"].ToString() : ""; 
     string id = RouteData.Values.ContainsKey("id") ? RouteData.Values["id"].ToString() : ""; // maybe you have may be you dont? 

     action = "Contact"; // to to avoid loop in my test application, remove this line if you need 

     // this.Request.QueryString.AllKeys 

     System.Web.Routing.RouteValueDictionary target = new System.Web.Routing.RouteValueDictionary(); 
     target.Add("controller", controller); 
     target.Add("action", action); 

     if (!string.IsNullOrWhiteSpace(id)) 
     { 
      target.Add("id", id); 
     } 


     foreach(string key in Request.QueryString.AllKeys) 
     { 
      target.Add(key, Request.QueryString[key]); 
     } 

     return RedirectToRoute(target); 
+0

Поскольку 'RouteData.Values' является словарь, вы можете использовать' RouteData. Values.TryGetValue() ', поэтому вам не нужно дважды« искать »словарь с помощью« RouteData.Values.ContainsKey »(« ключ ») и« RouteData.Values ​​["key"] '. –

Смежные вопросы