用户想要在他的博客中发帖,他填写该字段并点击
submit
。网站运行缓慢,他再次点击,再次点击。
终于保存了,但现在他检查了他的帖子并看到了
4
个帖子。
如何防止这种情况发生?如果用户点击提交一次,我希望do nothing
进行下一次点击或abort previous
并开始新帖子,以较晚者为准更有意义或推荐。
带有
的表单@using (Ajax.BeginForm(...))
{
}
答案 0 :(得分:17)
实现此目的的最简单方法是在点击后禁用提交按钮。
将以下javascript(jQuery)添加到您的视图中:
$(function () {
$('input[type="submit"]').click(function() {
$(this).attr('disabled', 'disabled');
});
});
如果需要,请记住在ajax请求完成后启用按钮:
$('input[type="submit"]').removeAttr('disabled');
更新:
最好在表单提交事件处理程序中禁用提交按钮,因为用户可以通过按Enter键提交表单:
$(function () {
$('form').submit(function() {
$('input[type="submit"]', this).attr('disabled', 'disabled');
});
});
答案 1 :(得分:3)
有很多解决方案。
一个是创建一个随机
GUID
作为隐藏领域的形式 用帖子插入数据库。 在插入之前,它会检查GUID
已经存在。
或者,您可以使用诸如DateTime之类的不动产(作为隐藏字段发送到客户端)或“帖子标题”。
答案 2 :(得分:0)
如果用户点击您创建真实帖子的帖子区域的操作链接,但将其“状态”设置为草稿,那么该怎么办?在InsertOnSubmit()之后,帖子会立即重定向到您检索帖子并进行编辑的操作。这种情况发生得太快,用户不会注意到。因此,如果网站速度很慢并且他多次点击“提交”,您将不会生成仅保存到同一记录的新记录。我在我工作的任务列表应用程序上使用该过程。请参阅下面的代码。
Better Task List Ticket Controller
它可能不是最忠实的解决方案,但可以引导您找到适合您的更有创意的解决方案。
答案 3 :(得分:0)
我的投票是针对ActionFilters。 This blog post有代码可以放入您的项目并装饰您的行为。