Каков «лучший» способ обрабатывать действия «Отправить» и «Получить» поочередно? - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь собрать что-то довольно простое, но я пытаюсь сделать это правильно.Но я изо всех сил пытаюсь выяснить, что лучше.

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

[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 ();с этой виртуальной машиной.Сейчас я думаю, что это «лучшее» решение, но я чувствую, что оно довольно трудоемкое ...

1 Ответ

0 голосов
/ 04 января 2019

В соответствии с условиями, я бы предложил использовать в зависимости от ваших предпочтений:

1) Сохранить в db в конце каждого сообщения формы, и, как вы предложили, я бы перенаправил на GET.2) В зависимости от количества страниц формы и ваших требований получение значений, необходимых для получения формы, будет стандартной практикой.Это гарантирует, что если пользователь выбрасывает форму на любом этапе, вы можете запустить ее с того места, где он остановился.3) Я бы не стал настраивать viewmodel для следующей формы в посте предыдущего.Как правило, в рамках принципа единой ответственности вы хотите, чтобы у ваших методов была только одна причина для изменения.4) Шаблон PostRedirectGet должен быть реализован таким образом, чтобы гарантировать, что данные не будут сохранены несколько раз, если пользователь обновляется после публикации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...