禁用(灰化) Button 后提交的问题

本文介绍如何在ASP.NET2.0中解决SubmitButton提交时的重复点击问题,通过禁用提交按钮防止多次提交,并提供了一个完整的测试代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

某些处理响应时间较长,为了防止用户重复连续点击提交按钮,我们通常会在点击之后 disable 此按钮。

在 ASP.NET 2.0 中 asp:button 默认使用客户端浏览器的提交机制即呈现为 input type=submit,
如果直接设置 onclientclick="this.disabled=true" ,将无法执行提交。

解决方法:
只有设置 UseSubmitBehavior=false,按钮呈现为 input type=button,然后添加脚本

None.gif          < asp:Button  ID ="Button1"  UseSubmitBehavior ="false"  runat ="server"  OnClientClick ="this.value='submittingdot.gif';this.disabled=true;"  OnClick ="Button1_Click"  Text ="Test1"   />
None.gif

曾想当然的认为可以在 form 的 onsumit 中 disable  input type=submit
注:ASP时代更常用此方案,可以同时对一个form具有多个提交按钮作出统一的“响应”

经测试,发现虽然可以回发页面,但是却无法触发服务器端的 Click 事件。01.gif

原来,当点击 input type=submit 按钮时,如果其 disabled=false(正常状态),那么浏览器会同时提交此按钮
(Request.Form 集合中可以查询到此按钮的value),而 disabled=true(禁用),浏览不会提交此按钮的value。
而 ASP.NET 内部则检索是否有Request.Form中有对应的name匹配当然页面WebControl.UnquieID 来确定谁提交了改页面,由此引发注册的服务器事件。

Updated 已经实现 2007年7月11日
让 ASP.NET 2.0 的 Sumbit Button 支持 禁用(灰化)提交

对于,input type=button ,浏览器永远都不提交此按钮给服务器,对于此类型提交,需要有一个隐藏域
input type=hidden name=__EVENTTARGET 来存储谁提交了此页面。

完整测试代码:

ContractedBlock.gif ExpandedBlockStart.gif
ExpandedBlockStart.gifContractedBlock.gif<%dot.gif@ Page Language="C#" %>
None.gif
None.gif
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
None.gif
ExpandedBlockStart.gifContractedBlock.gif
<script runat="server">dot.gif
InBlock.gif
InBlock.gif    protected 
void Button1_Click(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        System.Threading.Thread.Sleep(
1000 * 2);
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    protected 
void Page_Load(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif
ExpandedBlockEnd.gif    }

None.gif
</script>
None.gif
None.gif
<html xmlns="http://www.w3.org/1999/xhtml" >
None.gif
<head runat="server">
None.gif    
<title>Untitled Page</title>
ExpandedBlockStart.gifContractedBlock.gif    
<script type="text/javascript">dot.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
function chk(frm) dot.gif{
InBlock.gif        frm.Button2.disabled 
=true;
InBlock.gif        frm.Button2.value
='submittingdot.gif';
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif    
</script>
None.gif
</head>
None.gif
<body>
None.gif    
<form id="form1" runat="server" onsubmit="chk(this)">
None.gif    
<div>
None.gif        
<asp:Button ID="Button1" UseSubmitBehavior="false" runat="server" OnClientClick="this.value='submittingdot.gif';this.disabled=true;" OnClick="Button1_Click" Text="Test1" />
None.gif        
<asp:Button ID="Button2" runat="server" OnClick="Button1_Click" Text="Test2"  />
None.gif        
<asp:Button ID="Button3" runat="server" OnClientClick="this.value='sorry, the form cant be submitted.';this.disabled=true;" OnClick="Button1_Click" Text="Test3" />
None.gif    
</div>
None.gif    
</form>
None.gif
</body>
None.gif
</html>
None.gif

 下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值