furongwei 2020-04-25
解决防止多次点击,使数据重复提交,也就是防止二次提交
由于趁网络不注意,多点了几次,发生了不可描述的事情,可以在 aps.net 的 Button 中添加以下两个属性
UseSubmitBehavior="false" OnClientClick="this.disabled=true;"
使用 OnClientClick 的原因是用OnClientClick的属性来调用Javascript从而实现Disable按钮,加入UseSubmitBehavior属性防止点击按钮只执行客户端的代码,服务器端代码就不执行了,值有false和 true,false表示不用客户端方法提交,则从服务器端提交,也就是执行OnClick的事件。反之,如果是true,则从客户端提交,忽略服务器端的事件。
UseSubmitBehavior属性可以指定Button控件是使用客户端浏览器的提交机制还是ASP.NET回发机制。默认情况下,此属性的值为true,导致Button控件使用浏览器的提交机制。如果指定false,则ASP.NET页面框架会将客户端脚本添加到页面,以将表单发布到服务器。当UseSubmitBehavior属性为时false,控件开发人员可以使用GetPostBackEventReference方法返回Button的客户端回发事件。GetPostBackEventReference方法返回的字符串包含客户端函数调用的文本,可以将其插入客户端事件处理程序中。
OnClientClick 和 OnClick 区别:
OnClientClick是客户端事件处理方法,一般采用JavaScript进行处理,可以直接在浏览器中运行,不跟后台发生交互。
OnClick是服务器端事件处理方法,在服务器端,也就是IIS中运行。执行顺序为:点击按钮->页面回传(PostBack)->执行Click事件绑定的方法
在 .NET 的 button中添加上述两个属性
<asp:Button ID="btnAddUpt" runat="server" Text="保存" CssClass="ttbtn" onclick="btnAddUpt_Click" UseSubmitBehavior="false" OnClientClick="this.disabled=true;" style="width:80px; display:none;" />
官方文档:
https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.webcontrols.button.usesubmitbehavior?redirectedfrom=MSDN&view=netframework-4.8#System_Web_UI_WebControls_Button_UseSubmitBehavior