防止在服务器处理完成之前用户多次点击提交按钮处理代码

如果网页速度过慢或者其他原因,用户多次提交能导致数据的修改,怎么解决这个问题呢?
这段是放在 Page_Load 中


代码如下:

if(!Page.IsPostBack)
{
System.Text.StringBuilder s = new System.Text.StringBuilder();
s.Append("a();");
s.Append(this.GetPostBackEventReference(this.Button1));
this.Button1.Attributes.Add("onclick",s.ToString());
}
a() 是 JS
function a()
{
var ok=document.getElementById('Button1');
ok.disabled = true;
return true;
}

浓缩后即为


代码如下:

btnSave.Attributes.Add("onclick","this.disabled='true';"+GetPostBackEventReference(btnSave));

一个问题稍微困扰了一下,后来解决了,btnSave.Attributes.Add("onclick","a();"+GetPostBackEventReference(btnSave)); 如果a()这个函数还包含其他验证,比如说一些正则验证等,btnSave.Attributes.Add("onclick","return a();"+GetPostBackEventReference(btnSave)); 则不能进行。可以将JS代码全部在CS文件中写就OK拉。


代码如下:

System.Text.StringBuilder s = new System.Text.StringBuilder(); s.Append("var ok=document.getElementById('Button1'); ");
s.Append("ok.disabled = true; ");
s.Append(this.GetPostBackEventReference(this.Button1));
this.Button1.Attributes.Add("onclick",s.ToString());
//.net 2.0以上
Button1.Attributes.Add("onclick", "this.disabled=true;" + this.ClientScript.GetPostBackEventReference(Button1, ""));




代码如下:

<asp:Button ID="btnSumbit" runat="server" UseSubmitBehavior="false" OnClientClick="this.value='Sumbit';this.disabled=true; " Text="Sumbit" OnClick="btnSumbit_Click" />

其他的方法(可供尝试)
方法一


代码如下:

protected void Page_Load(object sender, EventArgs e)
{
btn.Attributes.Add("onclick", "state=true;");
StringBuilder sb = new StringBuilder();
sb.Append("if (!state) return;");
sb.Append("var button=document.getElementByIdx_x('btn');");
sb.Append("button.value='Please Wait...';");
sb.Append("document.body.style.cursor='wait';");
sb.Append("button.disabled=true;");
string strScript = "<script>";
strScript = strScript + "var state=false;";
//将函数绑定到页面的onbeforeunload事件:
strScript = strScript + "window.attachEvent('onbeforeunload',function(){" + sb.ToString() + "});";
strScript = strScript + "</" + "script>";
Page.RegisterStartupScript("onbeforeunload", strScript);
}
protected void Submit_Click(object sender, EventArgs e)
{
//模拟长时间的按钮处理
System.Threading.Thread.Sleep(2000);
Response.Write("<script>alert('bbbbbb!!');" + "</" + "script>");
}
<asp:Button ID="btn" Text="Submit" OnClick="Submit_Click"
runat="server"/>

方法2


代码如下:

<asp:button id="btnSubmit" OnClick="Submit_Click" runat="server" OnClientClick="this.disabled=true;this.form.submit();" UseSubmitBehavior="False"/>

方法3


代码如下:

this.btnSubmit.Attributes["onclick"]=this.GetPostBackEventReference(this.btnSubmit)+";this.disabled=true;";//防止重复提交

(0)

相关推荐

  • JS防止用户多次提交的简单代码

    复制代码 代码如下: <html><body> <form action="login.action" method="post">  <input type="button" name="btn" value="提交表单" onclick="return sub();" /> </form></body></

  • 防止在服务器处理完成之前用户多次点击提交按钮处理代码

    如果网页速度过慢或者其他原因,用户多次提交能导致数据的修改,怎么解决这个问题呢? 这段是放在 Page_Load 中 复制代码 代码如下: if(!Page.IsPostBack) { System.Text.StringBuilder s = new System.Text.StringBuilder(); s.Append("a();"); s.Append(this.GetPostBackEventReference(this.Button1)); this.Button1.At

  • FTP服务器搭建之本地用户篇

    Vsftpd3.0--FTP服务器搭建之本地用户篇,具体内容如下 FTP服务在工作中是经用到的一种工具,可以实现上传下载等功能.那么今天我们来聊一聊FTP服务器使用本地用户登录的实现模式. 既然是本地用户,就少不了要创建本地用户,下面我们创建2个用户: 第一步:创建用户 第一次创建一个本地可登录的用户 这里2个用户的家目录的所有者都是有写权限的. 第二步:编辑vsftpd.conf配置文件 下面开始编辑/etc/vsftpd/vsftpd.conf 开启本地用户最简单的配置如下: 只需把家目录的

  • 十分钟内学会 避免用户刷新导致重复POST提交

    Question 在Web应用中,采用POST提交信息是非常常见的,然而如果目标页面打开得太慢,用户就可能会刷新页面,这时候之前已经提交过的信息就会被重复提交.即使用户成功打开了POST提交目标页,之后他通过链接导航到别处了,再退回到POST提交目标页时仍可能会重复提交页面(例如因为浏览器缓存已失效).而且,只要碰到重复POST提交的场景,浏览器就会问用户是否确认重做此操作,用户并不一定能正确理解重做意味着重做什么,浏览器又不允许网站向用户解释清楚,所以这属于非常不友善的设计.那么我们应该如何避

  • Oracle 11g用户修改密码及加锁解锁功能实例代码

    1.运行 cmd.exe: 2.输入 sqlplus / as sysdba,以系统管理员(sysdba)身份连接数据库,进行数据库管理操作. 3.连接成功后执行 alter user identityName identified by password; -–修改密码 alter user identityName account unlock; -–解锁 alter user identityName account lock; -–加锁 identityName:需要修改的用户: pas

  • 前端防止用户重复提交js实现代码示例

    背景 前端在向后端进行数据提交的时候,通常会需要在第一次提交返回前,阻止用户在快速点击发送二次请求,即防止重复提交,最简单的方法是使用标志参数或者 class 元素控制,但缺点是,每个控制重复提交的地方都需要加上这个逻辑,重复性太强,且控制逻辑不统一. 目前前端使用的是http协议,所以提交方式为两种 异步提交,使用jQuery.ajax() form 表单同步提交 下面这篇文章将给大家详细介绍关于这两种方法实现的方法示例,下面话不多说了,来随着小编一起看看详细的介绍吧 异步防重复提交的方案如下

  • vue监听用户输入和点击功能

    本文实例为大家分享了vue监听用户输入和点击的具体代码,供大家参考,具体内容如下 功能1:监听用户输入和点击,并实时显示, 功能2:点击发布,编辑页面隐藏,显示发布成功. 功能1 html代码: 使用:v-model监听,!submmited视图默认显示,注意监听option v-for="(i,index) in authors"   v-bind:value="authors[index], 监听当下用户点击的那个: <div id="add-blog&q

  • Android 如何拦截用户频繁操作(点击事件)

    目录 前言 解决方案 场景1 场景2 总结 前言 在 Android 界面开发中,频繁操作是一个需要注意的点. 频繁操作: 频繁点击一个按钮,或者同时点击多个item,等产生的冲突情况. 解决方案 场景1 假设在 Activiyt A 界面有一个 按钮 T ,点击T 将跳转到 Activity B. void handleClick(){ Intent intent = new Intent(ActivityA.this,ActivityB.class); startActivity(inten

  • Windwos服务器远程桌面限制用户使用同一个会话的3种设置方法

    最近远程主机重装系统后,使用远程桌面出现一个问题:同一个用户先后登录远程系统,系统分配了不同会话.当系统分配不同会话时,导致你在一个远程桌面的操作都不见了.像是你运行的一些程序,虽然他们没有被系统关闭,但是你无法对他们进行管理.这就给你的管理带来极大的不便,文章将说明如何解决这个问题.这里以Windows Server 2008为例,其他系统只作参考. 如果将远程桌面会话主机服务器配置为限制用户只能进行一个会话,并且用户将该会话置于断开状态,用户下次连接到远程桌面会话主机服务器时,将自动重新连接

  • c#获得目标服务器中所有数据库名、表名、列名的实现代码

    复制代码 代码如下: /// <summary>        /// 获得目标服务器所有数据库名        /// </summary>        /// <param name="serverName"></param>        /// <param name="userName"></param>        /// <param name="passwor

  • asp.net(c#)限制用户输入规定的字符和数字的代码

    一下是这个代码: 只允许 用户名输入:用户名称的开头,必须为0~9.a~z或A~Z ! 复制代码 代码如下: protected void Button3_Click(object sender, EventArgs e) { int error_count = 0; //用于识别用户名的合法性 string str = TextBox1.Text.Trim(); if (str == string.Empty) { Response.Write("用户名称不能为空!"); retur

随机推荐