Вопрос по asp.net-mvc, asp.net-mvc-routing, redirecttoaction, query-string – установка строки запроса в redirecttoaction в asp.net mvc

6

Я должен сделатьredirecttoaction Вызовите в asp.net mvc view с различными параметрами, извлеченными со страницы реферера view (статус сетки).

У меня есть (в скрытом поле) содержимое строки запроса (иногда пустое, иногда с 2 параметрами и т. Д.), Поэтому у меня проблемы с созданием массива значений маршрута.

Существуют ли какие-либо помощники, которые помогают мне преобразовать строку запроса в массив значений маршрута? Что-то вроде:

string querystring ="sortdir=asc&pag=5";
return RedirectToAction( "Index", ConvertToRouteArray(querystring));
[это решение, должно помочь вам] [1] [1]:stackoverflow.com/questions/1067200/… MVCdragon

Ваш Ответ

2   ответа
2

Одно ограничение использованияRedirectToAction("actionName", {object with properties}) является то, что RedirectToAction () не имеет перегрузки, которая принимаетRedirectToAction(ActionResult(), {object with properties}), поэтому вы вынуждены использовать волшебные строки для имени действия (и, возможно, имени контроллера).

Если вы используетеБиблиотека T4MVC, он включает в себя два свободно распространяемых API-метода (AddRouteValue(...) а такжеAddRouteValues(...)), которые позволяют легко добавить один параметр строки запроса, все свойства объекта или всю строку Request.QueryString. Вы можете вызывать эти методы либо в собственных объектах ActionResult T4MVC, либо непосредственно в методе 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)));
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)); 
спасибо, последний рабочий код, который я написал: var parsed = HttpUtility.ParseQueryString (temp); Словарь & л; строка, объект & GT; querystringDic = parsed.AllKeys.ToDictionary (k = & gt; k, k = & gt; (объект) parsed [k]); return RedirectToAction (& quot; DirectUpdate & quot ;, новый RouteValueDictionary (querystringDic)); причина, по которой col [k] не определен в выборке, я сохранил проанализированный результат в переменной, но чтобы убедиться, что вызывается правильный конструктор RedirectToAction, я должен быть уверен, что передал словарь & lt; string, object & gt; используемый Luca Morelli
Я изменил свой ответ на общее решение.
забыл новый: return RedirectToAction (& quot; индекс & quot ;, новый RouteValueDictionary (querystringDic));
Благодаря @ LucaMorelli я обновил код.
это всего лишь пример, проблема в том, что строка запроса является переменной при каждом вызове даже в количестве параметров, поэтому я хочу найти общее решение Luca Morelli

Похожие вопросы