在ASP.Net MVC 2中检测浏览器刷新与表单提交

Eri*_* J. 1 refresh asp.net-mvc-2

我有一个ASP.Net调查问卷应用程序,它将数据重新提交到同一页面,每次都显示一个不同的问题.有BACK和NEXT按钮可以在问题之间导航.

我想检测何时提交表单是因为浏览器刷新而不是按下其中一个按钮.我遇到了一个WebForms方法,但不知道如何在MVC 2应用程序中应用这些主体,因为页面事件不可用(据我所知......我对微软的MVC模型很新).

如何将该原则应用于MVC 2?有没有更好的方法来检测刷新?

Dar*_*rov 5

你可以使用post-post-post模式TempData.例:

  1. "后退"和"下一步"按钮将表单发布到控制器操作
  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");
    }
}
Run Code Online (Sandbox Code Playgroud)