як додати значення рядка запиту за допомогою методу RedirectToAction?


78

У asp.net mvc я використовую такий код:

RedirectToAction("myActionName");

Я хочу передати деякі значення через рядок запитів, як це зробити?

Відповіді:


157

Будь-які передані значення, які не є частиною маршруту, будуть використовуватися як параметри рядка запитів:

return this.RedirectToAction
  ("myActionName", new { value1 = "queryStringValue1" });

Повернеться:

/controller/myActionName?value1=queryStringValue1

Припускаючи, що немає параметра маршруту з назвою "value1".


Погодьтеся, але може бути присутній параметр дії з назвою "value1". Чому ні?
Олександр Прокоф’єв

4
Я думаю, відповідь означала "припускаючи, що немає параметра маршруту з назвою 'value1'". В іншому випадку значення потраплятиме на місце параметра маршруту в згенерованій URL-адресі, наприклад, {controller} / {action} / {value1} стане / controller / myActionName / queryStringValue1, а не / controller / myActionName? Value1 = queryStringValue1.
Леві

Леві прав. Я зафіксував відповідь, щоб пояснити, що я мав на увазі.
Talljoe


4

Для таких людей, як я, які прагнули додати значення поточного рядка запиту до RedirectToAction, це рішення:

var routeValuesDictionary = new RouteValueDictionary();
Request.QueryString.AllKeys.ForEach(key => routeValuesDictionary.Add(key, Request.QueryString[key]));
routeValuesDictionary.Add("AnotherFixedParm", "true");
RedirectToAction("ActionName", "Controller", routeValuesDictionary);

Як ви бачите, рішення полягає у використанні об’єкта RouteValueDictionary


3

Не робіть тієї самої помилки, що і я. Я обробляв 404 помилки і хотів перенаправити за 404=filenameдопомогою рядка запитів, тобто mysite.com?404=nonExistentFile.txt.

Клавіші QueryString не можуть починатися з цифр. Перехід від 404до FileNotFoundвирішити мою проблему, тобто mysite.com?FileNotFound=nonExistentFile.txt.


1
Як правило, це неправда . Це також не відповідає конкретно для .NET MVC (принаймні у версії 5). Тільки пам’ятайте, що клавіші є рядками, навіть якщо вони складаються лише з цифр. Ви зможете отримати доступ до цифрового ключа наступним чином : HttpContext.Request.QueryString["404"].
BrianS
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.