Обнаружение обновления браузера и отправки формы в ASP.Net MVC 2 - PullRequest
1 голос
/ 27 мая 2010

У меня есть приложение для анкетирования ASP.Net, которое повторно отправляет данные на одну и ту же страницу, каждый раз показывая разные вопросы. Для навигации между вопросами есть кнопки BACK и NEXT.

Я хотел бы определить, когда форма отправляется из-за обновления в браузере по сравнению с одной из нажатых кнопок. Я сталкивался с подходом WebForms , но не знаю, как применить эти принципы в приложении MVC 2, так как события страницы недоступны (насколько я знаю ... Я довольно новичок в Microsoft Модель MVC).

Как применить этот принцип к MVC 2? Есть ли лучший способ обнаружить обновление?

1 Ответ

5 голосов
/ 27 мая 2010

Вы можете использовать шаблон перенаправления после публикации с TempData. Пример:

  1. Кнопки «Назад» и «Далее» POST формы для действия контроллера
  2. Действие контроллера переводит некоторое состояние в TempData и перенаправляет на другое действие контроллера, которое проверит, что данные находятся в TempData, и вернет представление
  3. Пользователь нажимает F5 в браузере, предыдущее действие вызывается при GET, и поскольку состояние больше не соответствует TempData вы знаете, что пользователь нажал F5 и не прошел через отправку формы.

И чтобы проиллюстрировать это:

public class HomeController: Controller
{
    public ActionResult Index()
    {
        var state = TempData["state"];
        if (state == null) 
        {
            // the user directly arrived on this action without passing 
            // through the form submission
        }
        return View();
    }

    [HttpPost]
    public ActionResult Index(string back)
    {
        TempData["state"] = new object();
        return RedirectToAction("Index");
    }
}
...