关于Asp.Net中避免用户连续多次点击按钮,重复提交表单的处理
Web页面中经常碰到这类问题,就是客户端多次点击一个按钮或者链接,导致程序出现不可预知的麻烦.
客户就是上帝,他们也不是有意要给你的系统造成破坏,这么做的原因很大一部分是因为网络慢,点击一个操作之后,系统响应慢,于是点击多次.如果我们遇到这种情况,
也许是一样的操作方法,所以解决问题才是王道.
废话不多说,直接切入正题.
方法一:在客户端制作一个遮罩层.
即用js和css制作一个纯白色或者黑色的遮罩的div,当客户端点击按钮时,弹出这个div并覆盖在当前用户界面之上,
这样遮罩层下面的内容被屏蔽,用户就无法进行鼠标的多次点击操作.
优点:一个好的遮罩层具有很美观的UI感受,并且相对降低一点用户等待服务器响应的枯燥度.
缺点:遮罩下面的内容,如果用键盘操作,比如Enter键,还是可以操作的哦.(亲,这也是后来测试中才发现的,也许还有更好的遮罩层的代码,能够做到这些吧,我是没有用过).
遮罩层代码不再给出,可以在网上搜索使用.
方法二:用js代码判断重复提交,给出提示并拒绝提交至服务器.
前台代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<script type="text/javascript">
//记录是否重复提交表单数据
var repeatFlag = false;
function CheckRepeatClick() {
if (repeatFlag == false) {
repeatFlag = true;
return true;
}
else {
alert("数据处理中,请稍候...");
return false
}
}
</script>
<body>
<form id="form1" runat="server">
<div>
这只是个测试网页
<asp:Button ID="btnOK" runat="server" OnClick="btnOK_Click" Text="OK" OnClientClick="return CheckRepeatClick();"/>
<asp:LinkButton ID="lkbtnOK" runat="server" onclick="lkbtnOK_Click" OnClientClick="return CheckRepeatClick();" >测试LinkButton按钮</asp:LinkButton>
</div>
</form>
</body>
</html>
后台代码:
protected void btnOK_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000); //这里只是为了模拟后台相应慢的一个动作,替换成你自己的处理逻辑就OK了
} 效果:当单击OK按钮后,提交请求至服务器,再次单击按钮,则弹出消息"数据处理中,请稍候..."。
对于LinkButton按钮的测试也是同样道理.
代码很简单,不过多说明。
优点:方法一中的缺点在这里得到了弥补。
缺点:方法一的优点这里没有了。
所以,将方法一和方法二同时使用,则相对完美一些啦,哈哈,我就是这么使用的。
方法三:单击按钮后,用js将按钮置为不可用状态,避免用户多次单击.
前台代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" EnableEventValidation="false" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<script type="text/javascript">
//记录是否重复提交表单数据
var repeatFlag = false;
function CheckRepeatClick() {
if (repeatFlag == false) {
repeatFlag = true;
return true;
}
else {
alert("数据处理中,请稍候...");
return false
}
}
</script>
<body>
<form id="form1" runat="server">
<div>
这只是个测试网页
<asp:Button ID="btnOK" runat="server" OnClick="btnOK_Click" Text="OK" />
<asp:LinkButton ID="lkbtnOK" runat="server" onclick="lkbtnOK_Click" >测试LinkButton按钮</asp:LinkButton>
</div>
</form>
</body>
</html>
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
this.btnOK.Attributes.Add(" onclick ", ClientScript.GetPostBackEventReference
(btnOK, " Click ") + " ;this.disabled=true; this.value='提交中...'; "); this.lkbtnOK.Attributes.Add(" onclick ", ClientScript.GetPostBackEventReference
(lkbtnOK, " Click ") + " ;this.disabled=true; ");
} protected void btnOK_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000); //这里只是为了模拟后台相应慢的一个动作,替换成你自己的处理逻辑就OK了
} protected void lkbtnOK_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000);
}
效果:当单击按钮OK后,按钮本身更改为灰色不可用,并更改文本为"提交中...",这时候再次单击按钮,无法向服务器发送请求,从而屏蔽了重复提交,
当服务器响应第一次请求完毕后,按钮恢复为可用状态和自己的文本。(对于LinkButton呢,我想说的是,一样可以变成灰色,但是它是可用的,再次
单击,仍然会向服务器发送请求)
优点:直接变成灰色不可用,比起再次单击一下然后给你个提示信息,要友好一些吧。
缺点:对于LinkButton该方法不凑效。
因为在项目中还要使用较多的LinkButton,所以果断放弃了该方法。
因为LinkButton生成的客户端页面中,是<a>标签,尝试使用diplay等进行修饰,都没有成功。如果有哪位大大有好的方法,不妨告知。
注意:前台页面的Page中要加上这句话 EnableEventValidation="false" 原因你懂得
关于Asp.Net中避免用户连续多次点击按钮,重复提交表单的处理的更多相关文章
- PHP防止用户重复提交表单
我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦. 那么如何规避 ...
- jsp中普通按钮如何提交表单
jsp中普通按钮如何提交表单方法1: <form action = "提交的地址"> <input type="submit" ...
- struts2中token防止重复提交表单
struts2中token防止重复提交表单 >>>>>>>>>>>>>>>>>>>&g ...
- php中限制ip段访问、禁止ip提交表单的代码
在需要禁止访问或提交表单的页面添加下面的代码进行判断就可以了. 注意:下边只是一个PHP限制IP的实例代码,如果您打算应用到CMS中,请自行修改. <?php /加IP访问限制 if(geten ...
- ASP.NET 给作为隐藏域的TextBox赋值之后提交表单,无响应?
操作步骤: 给页面隐藏TextBox赋值,然后触发ASP.NET change事件,调用ASP.NET后台方法,调用后执行客户端脚本this.RegisterClientScriptBlock(Dat ...
- yii防止延迟用户多次点击按钮重复提交数据
是不是被用户的行为所困扰? 一. 一个表单用户点击提交按钮了N次,这也导致了数据提交了N次. 为了此受到了测试的欺辱,受到了老板的批评? 不用怕,它就是来拯救你的. 第一步:打开命令行,敲入 comp ...
- Ajax在jQuery中的应用 (4)向jsp提交表单数据
ajax技术带给我们的是良好的用户体验,同时,使用jquery可以简化开发,提高工作效率. 下面就介绍一下大致的开发步骤. 工具/原料 本文中使用的是 jquery-1.3.2.min.js 方法/步 ...
- 重新理解了重定向,利用重定向可以防止用户重复提交表单(兼谈springmvc重定向操作)
自己用springmvc框架有一段时间了,但是都还一直分不清楚什么时候应该用转发,什么时候应该用重定向.可能用转发的情形太多了,以致于自己都忘记了还有重定向. 当用户提交post请求之后,刷新页面就会 ...
- 防止asp.net连续点击按钮重复提交
1.在Page_Load中添加如下代码: protected void Page_Load(object sender, EventArgs e) { this.btnEdit.Attributes[ ...
随机推荐
- codeforce ---A. Milking cows
A. Milking cows time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- Longest Consecutive Sequence——Leetcode
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...
- OpenStack Havana 部署在Ubuntu 12.04 Server 【OVS+GRE】(一)——控制节点的安装
序:OpenStack Havana 部署在Ubuntu 12.04 Server [OVS+GRE] 控制节点: 1.准备Ubuntu 安装好Ubuntu12.04 server 64bits后 ...
- 代码编写横屏的UIView
- (id )initWithFrame:(CGRect )frame { if (self = [super initWithFrame :frame]) { // Important here, ...
- hdu 4762 Cut the Cake概率公式
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4762 题目大意:一个圆形蛋糕,现在要分成M个相同的扇形,有n个草莓,求n个草莓都在同一个扇形上的概率. ...
- UVa 11825 集合dp
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #i ...
- Apache Mesos_百度百科
Apache Mesos_百度百科 Apache Mesos
- hdoj 2196 Computer【树的直径求所有的以任意节点为起点的一个最长路径】
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- cf493A
Description Vasya has started watching football games. He has learned that for some fouls the player ...
- jquery中字符串类型转换成整形的方法
jQuery有一个自带的函数为parseInt():这个函数可以把字符型的数字转换成整形例如: parseInt("1234"); //返回1234 parseInt(" ...