public void
page_load(Object obj,EventArgs e) 
...
{
btn.Attributes.Add("onclick","state=true;");
StringBuilder sb=new StringBuilder();
sb.Append("if (!state) return;");
sb.Append("var button=document.getElementById('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);
}


private void Submit_Click(Object sender, EventArgs e)...
{
//模拟长时间的按钮处理
System.Threading.Thread.Sleep(3000);
Response.Write("<script>alert(xxx!!');"+"</"+"script>"); 
}
<asp:button id="btn" Text="Submit" OnClick="Submit_Click" runat="server"/>
修改好的这个例子原理是提交后将按钮置于一定时间的无效状态.
仅能防止一些,因网速慢而心急的用户造成的误点击.
对于恶意的多次刷新而形成的多次提交还是没有办法解决.
(不过应该可通过页面的onbeforeunload事件解决)
| 如何在用户关掉web浏览器窗口前, 进行相应的动作 参考 maison 'blog | |
|
<script language="javascript">
g_blnCheckUnload
= true
;![]() function RunOnBeforeUnload() ...
{ if (g_blnCheckUnload) ![]() ...{//注意异常的捕获![]() try...{ window.event.returnValue = 'You will lose any unsaved content'; ![]() }catch(e)...{} } ![]() }
</script>
<body onbeforeunload="RunOnBeforeUnload()">
</body>
触发于:
可以用在以下元素: |

本文介绍了一种在ASP.NET中防止表单重复提交的方法,通过在页面加载时设置按钮状态并在提交时禁用按钮来实现。此外,还讨论了如何利用onbeforeunload事件来警告用户未保存的更改。

}
1127

被折叠的 条评论
为什么被折叠?



