Когда вы используете View() и RedirectToAction

Этот существующий вопрос подводит итоги моего вопроса. Лучшие ответы там говорят о различии между этими двумя методами. Я ищу рекомендации относительно того, какой метод использовать.

Короче говоря, у меня есть действие в контроллере, который обрабатывает форму, а затем отображает результаты обработки. Когда следует использовать return View(), а не return RedirectToAction("FormResult")?

Ответы

Ответ 1

Вы тоже можете использовать. Вообще говоря, хотя после публикации формы вы хотите перенаправить, так что обновление страницы не приведет к отправке формы. Иногда, однако, невозможно скопировать состояние на новую страницу, и ваша обработка является идемпотентной, поэтому обновление ничего не повредит.

Не то, чтобы там было жесткое правило. Вы вроде должны взвесить плюсы и минусы.

Ответ 2

Рискну сказать, что есть жесткое и быстрое правило (а может быть и больше) - шаблон Post/Redirect/Get (PRG). Стандарт MVC (и HTML-помощники фактически ожидают, что вы будете использовать этот шаблон):

  1. опубликовать свои данные.
  2. Если есть ошибка (то есть 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 перенаправляет на заданный маршрут, определенный в Таблица маршрутов.