有效防止用户多次提交及手工实现UpdateProgress效果

22 篇文章 0 订阅
6 篇文章 0 订阅
前台代码:
< div id = " waitDiv "  style = " color:Red;display:none; " > Loading... </ div >
< asp:UpdatePanel ID = " up0Demo "  runat = " server " >
          
< ContentTemplate >
                
< asp:Label ID = " lblServerTime "  runat = " server " ></ asp:Label >< br />
                
< asp:Button ID = " btnGetTime "  runat = " server "  Text = " Get "  
                    onclick
= " btnGetTime_Click "   />
           
</ ContentTemplate >
</ asp:UpdatePanel >
 js代码:
Sys.Application.add_init(onInit);      
        function onInit(sender,args)
        
{
            var prm
=Sys.WebForms.PageRequestManager.getInstance();
            prm.add_initializeRequest(onInitializeRequest);
            prm.add_beginRequest(onBeginRequest);
            prm.add_pageLoaded(pageLoaded);
        }

function onInitializeRequest(sender,args)
        
{
            var btnGetTimeID
='<%= btnGetTime.ClientID %>';
            
if(sender.get_isInAsyncPostBack()&&args.get_postBackElement().id==btnGetTimeID)
            
{
                args.set_cancel(
true);
                alert(
"请不要多次提交");
            }

        }

        function onBeginRequest(sender,args)
        
{
            $
get("waitDiv").style.display="block";
            $
get('<%= btnGetTime.ClientID %>').disabled=true;
        }

        function pageLoaded(sender,args)
        
{
            $
get("waitDiv").style.display="none";
        }
后台代码:
     protected   void  btnGetTime_Click( object  sender, EventArgs e)
    
{
        lblServerTime.Text 
= DateTime.Now.ToString();
        System.Threading.Thread.Sleep(
5000);//模拟网络延迟5秒钟
    }

调试时发现能非常成功阻止用户多次提交(因为提交过程中禁用了提交按钮嘛),但是问题也来了,异步更新后发现那个按钮又能点了,我想奇怪了,我没有在后继代码中设置提交按钮可用,怎么现在又能用了呢。嘿嘿!

想想为什么?聪明的你一定想到了吧,你进行了异步更新嘛,那个显示时间的Label和提交Button都跟服务器进行了更新所以恢复成可用的了。我一开始怎么也没想明白。。。。笨哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值