Я пытаюсь собрать что-то довольно простое, но я пытаюсь сделать это правильно.Но я изо всех сил пытаюсь выяснить, что лучше.
У меня есть цепочка процессов, где пользователь должен заполнить некоторые поля в различных формах.Иногда это зависит от того, какие пользовательские данные формируют пользователь.
[HttpGet]
public IActionResult Form1(Form1Vm f1vm)
{
return View(f1vm);
}
[HttpPost]
[ActionName("Form1")]
public IActionResult Form1Post(Form1Vm f1vm)
{
//process the data etc
//prepare the new viewmodel for the next form view (f2vm)
//Option1:
return View("Form2", f2vm);
//Option2:
return RedirectToAction("Form2", f2vm);
//for Option 2 I would need an additional HttpGet Action Method in which I
//would have to call Modelstate.Clear(); in order to not have the
//immediate validation errors on page load
//also all the properties of my viewmodel are passed as get parameters
//what looks pretty nasty for me
}
//More form views action methods should be added here...:
Какой способ лучше?Как уже упоминалось в моих комментариях выше, у меня довольно большой недостаток использования опции RedirectToAction.Однако, если я использую прямой View ();позвоните, я не забочусь о https://en.wikipedia.org/wiki/Post/Redirect/Get, и пользователь не может просто обновить страницу, не получив предупреждение о том, что его форма отправлена еще раз.
Я пропускаю другой путь или нетвидите что-то очевидное?
Редактировать: Я только что подумал о третьем способе, который я видел довольно часто: не перевод всей виртуальной машины в метод HttpGet, а только ID.Затем мне придется загрузить все данные, сохраненные ранее, непосредственно из базы данных, снова сопоставить их с моей новой виртуальной машиной и затем вызвать View ();с этой виртуальной машиной.Сейчас я думаю, что это «лучшее» решение, но я чувствую, что оно довольно трудоемкое ...