Controlling Controller Action, порядок вызовов - PullRequest
2 голосов
/ 17 мая 2009

Я собираю вместе мастер, похожий на веб-приложение, которое будет принимать данные в форме и условно перенаправлять на страницу подтверждения, если введенный элемент уже существует. Что-то вроде

"в системе уже есть продукт с таким названием, вы уверены, что хотите продолжить?".

У меня может быть действие «Подтвердить» на моем контроллере для этого, но это действие должно быть вызвано только начальным действием «Добавить».

Мой вопрос в том, как лучше всего управлять порядком вызовов действий контроллера. Очевидно, кто-то может ввести URL-адрес // Подтвердить и подделать данные.

Надеюсь, я понимаю.

Спасибо

Ответы [ 2 ]

3 голосов
/ 17 мая 2009

Вы хотите, чтобы пользователь иногда что-то подтверждал, верно?

Если это так, отправьте форму для подтверждения действия; то

public ActionResult Confirm(MyObject mObj, string confirmButton )
{

   if( NotAlreadyExists(mObj) || confirmButton )
      return RedirectToAction("Create", mObj)
  else
  {
      ModelState.AddModelError("DuplicateProduct","Please confirm");
      ViewData["showConfirm"] = true;
      return View(mObj);
 }
}

Конечно, тогда вам вряд ли понадобится специальное действие, так как вы можете просто поместить свой код для создания текста данных вместо RedirectToAction, но что угодно ...

В этом случае представлению необходимо найти showConfirm и показать сообщение + кнопка подтверждения.

1 голос
/ 17 мая 2009

Вы не можете контролировать порядок вызовов действий контроллера.

Однако вы можете продвинуть эту концепцию в то, что вы кодируете в своем приложении.

Я могу придумать несколько способов, чтобы посетитель видел один шаг перед другим: состояние сеанса, файлы cookie, передача токена от действия к действию и временные данные в asp.net mvc.

TempData будет проще всего, держу пари, если вы просто хотите отключить эту функцию.

У Add добавлено специальное значение в TempData, прежде чем оно перенаправит на Подтверждение. Если Confirm не видит это значение в TempData, оно перенаправляется обратно в Add. Если он есть, Confirm работает в обычном режиме.

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