Когда вы используете View() и RedirectToAction
Этот существующий вопрос подводит итоги моего вопроса. Лучшие ответы там говорят о различии между этими двумя методами. Я ищу рекомендации относительно того, какой метод использовать.
Короче говоря, у меня есть действие в контроллере, который обрабатывает форму, а затем отображает результаты обработки. Когда следует использовать return View()
, а не return RedirectToAction("FormResult")
?
Ответы
Ответ 1
Вы тоже можете использовать. Вообще говоря, хотя после публикации формы вы хотите перенаправить, так что обновление страницы не приведет к отправке формы. Иногда, однако, невозможно скопировать состояние на новую страницу, и ваша обработка является идемпотентной, поэтому обновление ничего не повредит.
Не то, чтобы там было жесткое правило. Вы вроде должны взвесить плюсы и минусы.
Ответ 2
Рискну сказать, что есть жесткое и быстрое правило (а может быть и больше) - шаблон Post/Redirect/Get (PRG). Стандарт MVC (и HTML-помощники фактически ожидают, что вы будете использовать этот шаблон):
- опубликовать свои данные.
- Если есть ошибка (то есть
ModelState.IsValid=false
), тогда return View()
в противном случае return RedirectResult
.
Если произошла ошибка, HTML-помощники фактически посмотрят на опубликованные значения, чтобы отобразить их заново, в отличие от того, что вы передаете им View(model)
- опять же, потому что паттерн PRG "должен" быть тем, что произошло.
Ответ 3
- Обратный просмотр не создает новые запросы, он просто отображает представление
- без изменения URL-адресов в адресной строке браузера. Возвращение
RedirectToAction делает новые запросы и URL в браузере
адресная строка обновляется сгенерированным URL-адресом с помощью MVC.
- Return Redirect также делает новые запросы и URL в адресе браузера
бар обновляется, но вы должны указать полный URL для перенаправления
- Между RedirectToAction и перенаправлением лучше всего использовать
RedirectToAction для всего, что связано с вашим приложением
действия/контроллеры. Если вы используете перенаправление и укажите URL-адрес, вы
необходимо изменить эти URL вручную при изменении таблицы маршрутов.
- RedirectToRoute перенаправляет на заданный маршрут, определенный в
Таблица маршрутов.