前台代码:
js代码:
后台代码:
<
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 >
< 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 >
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";
}
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秒钟
}
... {
lblServerTime.Text = DateTime.Now.ToString();
System.Threading.Thread.Sleep(5000);//模拟网络延迟5秒钟
}
调试时发现能非常成功阻止用户多次提交(因为提交过程中禁用了提交按钮嘛),但是问题也来了,异步更新后发现那个按钮又能点了,我想奇怪了,我没有在后继代码中设置提交按钮可用,怎么现在又能用了呢。嘿嘿!
想想为什么?聪明的你一定想到了吧,你进行了异步更新嘛,那个显示时间的Label和提交Button都跟服务器进行了更新所以恢复成可用的了。我一开始怎么也没想明白。。。。笨哦