При использовании ASP.NET MVC в некоторых ситуациях (например, при отправке формы) может потребоваться RedirectToAction
.
Одна из таких ситуаций - это когда вы сталкиваетесь с ошибками проверки после отправки формы и вам нужно перенаправить обратно в форму, но вы хотите, чтобы URL-адрес отражал URL-адрес формы, а не страницу действия, на которую она отправляется.
Поскольку мне требуется, чтобы форма содержала изначально POST
отредактированные данные, для удобства пользователя, а также в целях проверки, как я могу передать данные через RedirectToAction()
? Если я использую параметр viewData, мои POST
параметры будут изменены на GET
параметры.
c#
asp.net-mvc
Мэтт Митчелл
источник
источник
Ответы:
Решение состоит в том, чтобы использовать свойство TempData для хранения необходимых компонентов запроса.
Например:
Затем в действии «Форма» вы можете:
источник
Имейте в виду, что TempData хранит коллекцию форм в сеансе. Если вам не нравится такое поведение, вы можете реализовать новый интерфейс ITempDataProvider и использовать другой механизм для хранения временных данных. Я бы не стал этого делать, если вы не знаете (посредством измерения и профилирования), что использование состояния сеанса вредит вам.
источник
Взгляните на MVCContrib , вы можете сделать это:
источник
Есть еще один способ избежать временных данных. Мне нравится шаблон, в котором создается одно действие как для исходного рендеринга, так и для повторного рендеринга недопустимой формы. Это выглядит примерно так:
Это более или менее закономерно. Немного псевдой. С его помощью вы можете создать 1 представление для обработки рендеринга формы, повторного отображения значений (поскольку форма будет заполнена предыдущими значениями) и отображения сообщений об ошибках.
При публикации этого действия, если он действителен, управление передается другому действию.
Я пытаюсь упростить этот шаблон в среде проверки .NET, поскольку мы создаем поддержку MVC.
источник
Если вы хотите передать данные перенаправленному действию, вы можете использовать следующий метод:
источник
TempData - это решение, которое удерживает данные от действия к действию.
источник