Действие ASP.NET MVC [HttpPost] принимает один объект, возвращает ошибки проверки в ViewPage <CustomViewModel> - PullRequest
1 голос
/ 23 сентября 2010

Я экспериментирую с различными комбинациями строго типизированных моделей представления, полных и частичных представлений, используя как RenderPartial (), так и RenderAction ().Сценарий пост-формы, о котором я спрашиваю, - это сценарий, который исходит из «основного» представления - сценарий, который не является частичным.Контроллер этого основного представления создает модель представления, которая предоставляет частичные представления с их моделями.

Действие [HttpPost] также находится в главном контроллере и принимает один объект:

    [HttpPost]
    public ActionResult Edit([Bind(Prefix="Book")]Book book)

Когда ModelState действителен и обновление прошло успешно, я использую RedirectToAction (), что вполне нормально.

Однако при наличии ошибок в ModelState я пытаюсь:

Return View(book);

- и представление, конечно, ожидает объект модели «основного» представления, который содержит все виды других объектов, списки выбора и т. Д., Что является проблемой.

В этом случае выполнителюди используют весь объект модели представления в качестве параметра для своего действия [HttpPost], чтобы они могли передать его обратно в случае ошибки?Я знаю, что это не может быть правильным, но думаю, что есть более простое решение, о котором я не знаю.

1 Ответ

0 голосов
/ 24 сентября 2010

Один общий шаблон, который стоит рассмотреть, это PRG или Post-Redirect-Get.

Если проверка не пройдена, перенаправьте на исходное действие Get, если проверка прошла успешно, ПОЛУЧИТЕ следующую страницу в последовательности.

  1. HTTP GET для "/ products / create", представление "Create" отображается
  2. HTTP POST для "/ products / submit"
  3. Ошибка проверки, перенаправление на "/ products / create", представление "Create" отображается
  4. HTTP POST для "/ products / submit"
  5. Элемент создан, перенаправление на "/ products / Подтвердить", представление "Подтвердить" отображается
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...