У меня есть спокойный URL-адрес для действия редактирования страницы. Это реализовано на контроллере как метод Edit, который принимает запросы GET и метод Edit, который принимает запросы POST.
Это означает, что вы можете посетить Редактировать URL-адрес и отобразить форму для GET или сохранить форму для POST.
[HttpGet]
public ActionResult Edit(int id) {
...
}
[HttpPost]
public ActionResult Edit(EditModel model) {
...
}
Образ Post-Redirect-Get (PRG) выглядит довольно черно-белым, потому что он по существу перенаправляет каждый POST обратно на действие GET. Тем не менее, мне нужно убедиться, что это правильная вещь.
Мой план заключается в том, что в действии POST, если модель действительна, я буду использовать шаблон Post-Redirect-Get, чтобы отправить пользователя в разумное место (возможно, действие Index или Details).
Однако, если есть проблема проверки модели, я все же хочу просто отобразить представление. Я не хочу перенаправлять пользователя, потому что это означает наложение модели и ModelState на временные данные и перенаправление на действие GET, а затем добавление логики в действие GET для обработки временных данных. Я мог бы избежать всего этого, просто отображая представление.
Да, если пользователь нажмет F5, он повторно отправит форму, и им будет представлено "предупреждение о повторной отправке", но затем на той же странице (с просьбой исправить ошибки проверки). Тем не менее, кажется маловероятным, что они попадут в F5, и нет никакой опасности двойного подчинения, так как форма просто не проверит проверку еще раз.
Если проверка прошла, пользователь будет перенаправлен, и они будут защищены от двойных представлений.
Итак, следует ли внедрять дополнительные данные кода и данных в временные данные, чтобы строго следовать шаблону PRG, или более разумно использовать шаблон PRG, когда форма действительна и данные хранятся?