关于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[ ...
随机推荐
- 新图形API为unity5 带来了什么&下一代新图形API的好处
西瓜的演讲ppt翻译+解释+其他: wolf96 在最基本的层面上,这些新api是为了改进CPU性能和效率,通过:减少CPU渲染瓶颈的情况,提供更多可预测和稳定的驱动的行为,给应用程序更多控制,就像在 ...
- HDOJ1175连连看 DFS
连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- 《图解密码技术》-chaper1-概述
密码和信息安全常识: (1)不要使用保密的密码算法. (2)不要使用低强度密码算法. (3)密码一定会被破解. (4)密码只是信息安全的一部分.
- java对Ldap操作2
package ldap.pojo;import java.util.List;/** * @author 张亮 * ldap用户属性信息数据类 */public class LdapPersonI ...
- thinkphp 重定向redirect
/** * URL重定向 * @param string $url 重定向的URL地址 * @param integer $time 重定向的等待时间(秒) * @param string $msg ...
- 【Android - V】之DrawerLayout的使用
DrawerLayout是Android V4包中的一个布局控件,用来实现一个抽屉样式的布局. DrawerLayout通过设置子视图的layout_gravity来决定子视图停靠在屏幕的哪个边缘外侧 ...
- 前端性能优化:使用Data URI代替图片SRC
日期:2013-7-6 来源:GBin1.com 提升页面大小的效率,不仅仅是取决于使用精灵或是压缩代码,给定页面的请求数量在前端性能中也占有了很不小的重量.减少请求可以让你的网站加载更快,而其中一 ...
- Present ViewController Modally
一.主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等 ...
- GDB技巧整理
https://blog.atime.me/note/gdb-tricks.html 整理常用的gdb技巧. 常用命令 常用的gdb命令... 启动gdb 直接运行 gdb --args prog a ...
- etrace 跟踪程序函数动态执行流程
https://github.com/elcritch/etrace 窗口1: 监控窗口,执行监控程序,显示监控结果 [root@monitor example]# pwd /root/etrace- ...