Asp.net MVC: отправка обратно из представления - PullRequest
2 голосов
/ 07 января 2009

Считается ли лучшей практикой отправлять обратно на тот же контроллер, который выполнял рендеринг и перенаправление с исходного контроллера, если это необходимо? Или это то же самое, если прыгнуть на разные контроллеры из вида?

Ответы [ 2 ]

3 голосов
/ 07 января 2009

Я создаю два перегруженных действия в контроллере, одно для рендеринга формы ввода с использованием HTTP GET, а другое для обработки сообщения формы с помощью HTTP POST. Примерно так:

  public ViewResult Foo()
  {
    return View();
  }

  [AcceptVerbs(HttpVerbs.Post)]
  public ViewResult Foo( FormCollection form )
  {
    // process input
    if (inputOK)
      return RedirectToAction("Index");
    return View();
  }

Преимущество такого способа состоит в том, что в случае ошибки представление повторно отображается с любыми сообщениями об ошибках и проверками. Если это успешно, есть перенаправление на другое действие, которое позволяет избежать дублирования предупреждения о публикации в браузерах, если пользователь обновляет страницу - см. Опубликовать / Перенаправить / Получить в Википедии и эту запись в блоге Стивена Уолтера .

Существуют альтернативы принятию FormCollection, например, список простых параметров или привязка к объекту. Смотрите эту статью ScottGu .

2 голосов
/ 07 января 2009

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

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

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