Хороший шаблон ASP.NET MVC для отправки формы и немедленного отображения результатов - PullRequest
4 голосов
/ 09 марта 2009

Я слышал, что все рекомендуют перенаправить пользователя (HTTP GET) после того, как он отправит форму (HTTP POST). Это чисто, нет предупреждения "Вы хотите отправить", это просто ...

Но что, если я хочу показать пользователю какой-то результат?

Хорошо, я могу добавить некоторый параметр в URL-адрес GET, например "/? Message = 1", а затем проверить этот параметр .orm

Но что, если я хочу показать больше информации? Например, пользователь отправляет форму, и в результате получается простая структура, скажем ... 5 различных свойств, которые я хочу показать пользователю.

Что-то вроде: «Вы добавили товар в корзину, и вот еще 5 товаров, которые добавили другие». Теперь это упрощено, не говорите мне «А, просто передайте? ProductId = xy, а затем выполните другой запрос на основе этого идентификатора»

Должен ли я придерживаться модели POSTBACK?

Предположим, что пользователь является анонимным И без включенных файлов cookie.

Ответы [ 4 ]

4 голосов
/ 09 марта 2009

Для этого и нужны TempData. Это специально и только для случая, когда вы перенаправляете . Используйте его так же, как ViewData, за исключением того, что он выдержит перенаправление.

3 голосов
/ 09 марта 2009

Как насчет этого:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(string something) {
    if (something == "example") {
        ViewData["Something"] = something;
        ViewData["SOmethingElse"] = 23;
        return View("MyView");
    } else {
        return View("MyView");
    }
}

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index() {
    return View("TheForm");
}

Первый метод будет обрабатывать ваше почтовое событие, и вы можете передавать в него данные и обратно по мере необходимости. Второй метод будет обрабатывать начальный запрос get действия. Обратите внимание на атрибут AcceptVerbs в действии.

Эта опция не изменит URL. Если вы хотите, чтобы URL изменил ваш единственный вариант - использовать строку запроса.

2 голосов
/ 09 марта 2009

После успешного завершения публикации в вашем контроллере сохраните идентификатор транзакции для пользователя (для этого вы можете использовать провайдер ASP.NET Profile) и перенаправьте на завершенную страницу (GET).

В обработчике GET завершенной страницы вы можете найти идентификатор последней транзакции для пользователя и отобразить, что вы хотите, основываясь на этом.

«Идентификатор транзакции» - это некоторый идентификатор, на который вы позже сможете ссылаться, чтобы посмотреть детали транзакции.

вот последовательность URL, о которой я думаю:

  1. GET / orders / create - показать форму
  2. POST / orders / create - проверить и создать заказ (id заказа == 10), перенаправить на / orders / details / {orderId}
  3. GET / orders / details / 10 - поиск заказа 10, отображение заказа и любой дополнительной информации, связанной с ним
0 голосов
/ 13 марта 2009

Вы хотите использовать TempData ["mykey"] = ObjectIWantToUseOnTheNext Page.

См. Этот блог для получения дополнительной информации:

http://blogs.teamb.com/craigstuntz/2009/01/23/37947/

...