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

Asp.net mvc 2 在ASP.Net MVC 2中检测浏览器刷新与表单提交,asp.net-mvc-2,refresh,Asp.net Mvc 2,Refresh,我有一个ASP.Net调查问卷应用程序,它将数据重新提交到同一页面,每次都显示不同的问题。有返回和下一步按钮可在问题之间导航 我想检测由于浏览器刷新而提交表单的时间与按下其中一个按钮的时间。我遇到了一个问题,但不知道如何在MVC2应用程序中应用这些原则,因为页面事件不可用(据我所知……我对Microsoft的MVC模型还很陌生) 如何将该原则应用于MVC2?是否有更好的方法来检测刷新?您可以使用“发布后重定向”模式。例如: 后退和下一步按钮将表单发布到控制器操作 控制器操作将一些状态放入Temp

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

我想检测由于浏览器刷新而提交表单的时间与按下其中一个按钮的时间。我遇到了一个问题,但不知道如何在MVC2应用程序中应用这些原则,因为页面事件不可用(据我所知……我对Microsoft的MVC模型还很陌生)


如何将该原则应用于MVC2?是否有更好的方法来检测刷新?

您可以使用“发布后重定向”模式。例如:

  • 后退和下一步按钮将表单发布到控制器操作
  • 控制器操作将一些状态放入
    TempData
    并重定向到另一个控制器操作,该操作将验证数据是否在
    TempData
    中,并返回视图
  • 用户在浏览器上按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");
        }
    }
    

    @达林:当我刷新页面时,我看到默认的提交按钮包含在表单变量中。我不熟悉这一点,但是
    索引(返回字符串)
    是否依赖提交按钮不是发布数据的一部分?什么
    表单
    变量?我包含的
    back
    参数可用于检测表单上两个提交按钮中的哪一个被按下(下一个或上一个)。您可以在同一表单中有两个提交按钮,并为它们指定不同的名称。例如:
    。然后,您可以检查
    back
    参数是否为null或空,以了解单击了这两个按钮中的哪一个。@Darin:我的两个按钮当前命名为back和Next。单击刷新时,表单[“下一步”]包含一个值。是的,然后将我的
    back
    参数重命名为
    Next
    ,并且不查看
    Forms[“Next”]
    ,它将被传递给控制器操作。我将尝试一下。。。虽然是早上,因为这里已经很晚了。谢谢你的帮助!