【问题标题】:Detect Browser Refresh vs. Form Submit in ASP.Net MVC 2在 ASP.Net MVC 2 中检测浏览器刷新与表单提交
【发布时间】:2010-05-27 13:58:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net-mvc-2 refresh


    【解决方案1】:

    您可以在TempData 中使用redirect-after-post 模式。示例:

    1. Back 和 Next 按钮将表单发布到控制器操作
    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");
        }
    }
    

    【讨论】:

    • @Darin:当我刷新页面时,我看到表单变量中包含默认提交按钮。我是新手,但Index(string back) 不依赖提交按钮不是发布数据的一部分吗?
    • 什么Form变量?我包含的back 参数可用于检测在表单上按下了两个提交按钮中的哪一个(NEXT 或PREV)。您可以在同一个表单中有两个提交按钮,并给它们不同的名称。例如:<input type="submit" name="back" value="PREV" />。然后您可以检查back参数是否为null或为空,以了解单击了两个按钮中的哪个。
    • @Darin:我的两个按钮目前被命名为 Back 和 Next。当我单击刷新时,Forms["Next"] 包含一个值。
    • 是的,然后将我的back 参数重命名为Next 并且不要查看Forms["Next"],而是将其传递给控制器​​操作。
    • 我会试一试...早上虽然这里已经很晚了。感谢您的帮助!
    猜你喜欢
    • 2011-09-30
    • 1970-01-01
    • 2011-02-16
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2011-07-09
    • 2015-01-14
    相关资源
    最近更新 更多