如何让一个button只能点一下?防止点击多下而重复提交? 如何让一个button只能点一下?防止点击多下而重复提交? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private void button1_Click(object sender, System.EventArgs e) { button1.Enabled =false; } 在按鈕事件裏設一變量(如session,cookie),限制點擊次數... javascript就可以做到了。把按钮disable掉。这里发贴子不就是这样么。 在click事件里,将此按钮的Enabled属性设为false 同意 fantiny(喻捷) 的方法应该在客户端处理,在服务器端的 PostBack 中处理有延时,网速慢时根本行不通 private void button1_Click(object sender, System.EventArgs e) { button1.Enabled =false; } 应该用javascript实现,否则在服务器端控制的话,在服务器处理并返回之前,按钮还是可点的,你可以参照csdn里回复时的做法,查看元文件就行了 按照楼上几位的说法...那直接点IE的刷新按钮的话,是否也能用JS来解决? 在.NET中,对于重复提交的按钮处理方法,以往ASP可用的方法,再在已经不在可用了,主要是,如果将按钮在点击之后,变灰,则提交之后服务端即不再认可此按钮的事件.所以,可以简单用如下方法去解决.this.Button1.Attributes.Add("realvalue","0");this.Button1.Attributes.Add("onclick","this.realvalue ++;if(this.realvalue==1){alert('可提交')}else{alert('不可提交!');}return(false);"); 使用的时候,把后面的return(false);去除即可. 在button的onclick后 button1.Enabled =false 就可以了 http://www.cnblogs.com/smilnet/articles/24831.html自定义按钮:protected override void OnPreRender 重写这个方法 Page.IsPostBack属性判断是否提交过,进行控制 利用状态机,这个是基础参看设计模式的state http://www.cnblogs.com/goody9807/archive/2005/02/04/101896.html <script language="javascript" type="text/javascript"> //标识页面是否已提交 var subed = false; function check() { //验证是否重复提交 if (subed == true) { alert("信息正在发送给服务器,请不要重复提交信息!"); return false; } subed=true; } </script> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Add" method="post" runat="server" onsubmit="return(chec());"> 看看我这个例子如何(刚刚在别人的一个贴子中发表过)在webform3.aspx中代码如下:<%@ Page language="c#" Codebehind="WebForm3.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.WebForm3" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML> <HEAD> <title>WebForm3</title> <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> <script language=javascript > function abc() { var mybutton=document.getElementById("Button1"); mybutton.disabled=true; //变灰 __doPostBack("Button1",""); //执行服务器端button1的click事件 } </script> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <asp:TextBox id="TextBox1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server"></asp:TextBox> <asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 8px; POSITION: absolute; TOP: 40px" runat="server" Text="Button"></asp:Button> </form> </body></HTML>在webform3.aspx.cs中主要两个方法中的代码如下 :private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 this.GetPostBackEventReference(Button1); //这句很关键,有这句才能让客户端执行服务器端事件。 Button1.Attributes.Add("onclick","abc();"); }//用作测试用的private void Button1_Click(object sender, System.EventArgs e) { this.TextBox1.Text="1"; int k=0; for(int i=0;i<9999;i++) for(int j=0 ;j<999;j++) k=9; this.TextBox1.Text="1"; }测试结果:由于两个循环运行时间比较长,在运行时,button按钮一直是灰的,只有运行完才会恢复,如果运行完后还想变为灰的,那在最后添加一个this.Button1.Enabled=false;就行了。这样就达到了按钮先变灰然后执行服务器端事件。 呵呵,我写了一个自定义控件来达到这个目的。using System;using System.Drawing;using System.ComponentModel;using System.Web;using System.Web.UI;using System.Web.UI.Design;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;namespace WebCustomLib.Controls{ /// <summary> ///OneOffButton 的摘要说明。 /// </summary> /// [ ToolboxItemFilter("System.Web.UI",ToolboxItemFilterType.Require), ToolboxBitmap(typeof(OnlyOneButton),"OnlyOneButton.OnlyOneButton.bmp"), ToolboxData("<{0}:OneOffButton runat=\"server\"></{0}:OneOffButton>") ] public class OnlyOneButton : System.Web.UI.WebControls.Button { private const string JAVASCRIPT_ID = "{29FD7A41-49FD4FC4-AFA9-6A0B875A1A51}"; private const string JAVASCRIPT_HOOK = "return OneOffButton_Click_Handle(this);"; private const string JAVASCRIPT_SCRIPT = "\n" +"<SCRIPT Language=\"JavaScript\">\n" +"function OnlyOneButton_Click_Handle(ctrl)\n{\n" +"setTimeout(\"OnlyOneButton_Delay(\\\"\"+ctrl.name+\"\\\")\",100);\n" +"return true;\n}\n" +"function OnlyOneButton_Delay(ctrlname)\n{\n" +"eval(\"document.all.\"+ctrlname+\".disabled=true\");\n}\n" +"</SCRIPT>\n"; public OnlyOneButton() { this.Text = "OnlyOneButton"; } protected void RenderJavaScript() { if(!Page.IsClientScriptBlockRegistered(JAVASCRIPT_ID)) { Page.RegisterClientScriptBlock(JAVASCRIPT_ID,JAVASCRIPT_SCRIPT); } } protected override void AddAttributesToRender(HtmlTextWriter writer) { base.AddAttributesToRender (writer); writer.AddAttribute("OnClick",JAVASCRIPT_HOOK); } protected override void OnPreRender(EventArgs e) { base.OnPreRender (e); RenderJavaScript(); } }} 麻烦问大家关于数据绑定的问题 上传文件的问题 求个个xsl的写法,坐等答案 有没有.Net开源的精典小型BBS程序?DISCUZ的太大了。 AjaxPro,郁闷,以前能用,现在不能用了。大家分析一下什么原因 如何实现csdn论坛中提问的功能? 发布一个不刷新页面上传控件... 层被下拉控件挡住,咋办? 怎么判断下线 mvc4同一视图传入两个模型 请教C#.net 创建文件价错误,非常感谢 救救我吧,为什么SQL备份后只能恢复数据,不能恢复表和存储过程?
{
button1.Enabled =false;
}
应该在客户端处理,在服务器端的 PostBack 中处理有延时,网速慢时根本行不通
{
button1.Enabled =false;
}
所以,可以简单用如下方法去解决.this.Button1.Attributes.Add("realvalue","0");
this.Button1.Attributes.Add("onclick","this.realvalue ++;if(this.realvalue==1){alert('可提交')}else{alert('不可提交!');}return(false);"); 使用的时候,把后面的return(false);去除即可.
自定义按钮:protected override void OnPreRender 重写这个方法
参看设计模式的state
//标识页面是否已提交
var subed = false;
function check()
{
//验证是否重复提交
if (subed == true)
{
alert("信息正在发送给服务器,请不要重复提交信息!");
return false;
}
subed=true;
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Add" method="post" runat="server" onsubmit="return(chec());">
在webform3.aspx中代码如下:
<%@ Page language="c#" Codebehind="WebForm3.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.WebForm3" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm3</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<script language=javascript >
function abc()
{
var mybutton=document.getElementById("Button1");
mybutton.disabled=true; //变灰
__doPostBack("Button1",""); //执行服务器端button1的click事件
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:TextBox id="TextBox1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server"></asp:TextBox>
<asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 8px; POSITION: absolute; TOP: 40px" runat="server"
Text="Button"></asp:Button>
</form>
</body>
</HTML>在webform3.aspx.cs中主要两个方法中的代码如下 :
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
this.GetPostBackEventReference(Button1); //这句很关键,有这句才能让客户端执行服务器端事件。
Button1.Attributes.Add("onclick","abc();"); }
//用作测试用的
private void Button1_Click(object sender, System.EventArgs e)
{
this.TextBox1.Text="1";
int k=0;
for(int i=0;i<9999;i++)
for(int j=0 ;j<999;j++)
k=9;
this.TextBox1.Text="1";
}测试结果:由于两个循环运行时间比较长,在运行时,button按钮一直是灰的,只有运行完才会恢复,如果运行完后还想变为灰的,那在最后添加一个this.Button1.Enabled=false;就行了。这样就达到了按钮先变灰然后执行服务器端事件。
using System.Drawing;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;namespace WebCustomLib.Controls
{
/// <summary>
///OneOffButton 的摘要说明。
/// </summary>
///
[
ToolboxItemFilter("System.Web.UI",ToolboxItemFilterType.Require),
ToolboxBitmap(typeof(OnlyOneButton),"OnlyOneButton.OnlyOneButton.bmp"),
ToolboxData("<{0}:OneOffButton runat=\"server\"></{0}:OneOffButton>")
]
public class OnlyOneButton : System.Web.UI.WebControls.Button
{
private const string JAVASCRIPT_ID = "{29FD7A41-49FD4FC4-AFA9-6A0B875A1A51}";
private const string JAVASCRIPT_HOOK = "return OneOffButton_Click_Handle(this);";
private const string JAVASCRIPT_SCRIPT = "\n"
+"<SCRIPT Language=\"JavaScript\">\n"
+"function OnlyOneButton_Click_Handle(ctrl)\n{\n"
+"setTimeout(\"OnlyOneButton_Delay(\\\"\"+ctrl.name+\"\\\")\",100);\n"
+"return true;\n}\n"
+"function OnlyOneButton_Delay(ctrlname)\n{\n"
+"eval(\"document.all.\"+ctrlname+\".disabled=true\");\n}\n"
+"</SCRIPT>\n"; public OnlyOneButton()
{
this.Text = "OnlyOneButton";
} protected void RenderJavaScript()
{
if(!Page.IsClientScriptBlockRegistered(JAVASCRIPT_ID))
{
Page.RegisterClientScriptBlock(JAVASCRIPT_ID,JAVASCRIPT_SCRIPT);
}
} protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender (writer);
writer.AddAttribute("OnClick",JAVASCRIPT_HOOK);
} protected override void OnPreRender(EventArgs e)
{
base.OnPreRender (e);
RenderJavaScript();
}
}
}