【发布时间】:2014-09-28 07:45:09
【问题描述】:
我有自己的 MVC 应用程序,其中有 3 个主要区域:模型、视图、控制器。
在视图中,我创建了一个表单,用于向数据库插入一些数据。动作设置为同一页面,类型为:POST。
在模型中,我有一些基本的检查表单是否已提交。之后有 1 秒的睡眠。
在控制器中,我以一种非常简单的方式连接视图和模型,因此它们可以相互通信。
但是,每当访问者多次单击提交按钮时,就会出现问题。因为有 1 秒的等待时间(这是故意的 - 所以看起来系统正在处理数据),他们可以多次点击按钮。
这有一个问题,因为这样,数据会根据点击量插入到数据库中。如果我输出一个简单的单词,比如“Foo”,它只会显示 1 次(我猜这是因为页面每次都重新加载),但是数据会多次插入到数据库中。
有没有办法解决这个问题?我的意图是创建一个会话并检查这是否是第一次提交,否则对数据库不做任何事情。但是这不起作用,因为会话总是在页面加载时获得基本值。
谁能帮我解决这个问题?
【问题讨论】:
-
如果在插入之前检查记录是否被插入怎么办?或者更好 - 创建一个独特的约束来防止重复?
-
我试图运行一个检查 fr 唯一性的查询,但它似乎毫无价值。页面似乎在检查之前插入了所有内容,即使它存在。但是,我将其置于插入的条件下,只有在没有记录的情况下。我猜,如果它存在,它会以某种方式检查 1 次,然后插入多次 - 插入会以某种方式堆叠起来。
-
最简单的方法是用一些简单的javascript在前端处理它。
-
@Eugene 问题是,如果用户提交页面,他们可能会提供空字段、无效字段等,所以我不能在他们发送提交请求时简单地禁用按钮,因为他们只有当他们完全重新加载页面时才能重新提交他们的信息。
-
“看起来页面会在检查之前插入所有内容,即使它存在”——脚本会执行您编写的任何操作。如果它在检查之前插入,那么就是你这样做了。