如果我有这个asp.net按钮:
<asp:Button ID="Button_Save" Width="150px" OnClick="Button_Save_Click" runat="server" Text="Save" />
为了防止用户按两次按钮插入两个数据记录,我在后面的代码中添加了这个:
Button_Save.Attributes.Add("onclick", "this.disabled='true';" + ClientScript.GetPostBackEventReference(Button_Save_Data, null) + ";");
适用于IE和Chrome。但是,在Firefox中,每次用户按下按钮一次,我就会插入两个数据记录。
经过一段时间的谷歌搜索,我通过添加:UseSubmitBehavior="false"
:
<asp:Button ID="Button_Save" Width="150px" UseSubmitBehavior="false" OnClick="Button_Save_Click" runat="server" Text="Save" />
然后它也适用于Firefox,只插入了一个数据记录。但是,我将不得不为我的Web应用程序上的每个按钮添加该设置。这需要大量的工作。
然而,我认为如果在Firefox上运行的asp.net应用程序总是如此,这确实是一个大问题。或者我做错了什么?
提前致谢。
答案 0 :(得分:1)
最好将检查添加到SAVE代码以防止重复的POST。我使用了类似你的代码并且仍然有重复的记录,因为有人在错误的时间点击了刷新按钮。
修改强>: 这是我使用的代码。关键是将服务器上的值与回发中返回的值进行匹配。
在Page_Load中:
If Not IsPostBack Then
Session("rcdupdate") = Server.UrlEncode(System.DateTime.Now.ToString)
End If
在Page_Prerender中
ViewState("rcdupdate") = Session("rcdupdate")
并在保存例程中
If Session("rcdupdate").ToString = ViewState("rcdupdate").ToString Then
... write the data to the database ...
Session("rcdupdate") = Server.UrlEncode(System.DateTime.Now.ToString)
End If
答案 1 :(得分:0)
您可以扩展asp:button
并添加新功能,然后罚款/替换所有asp:buttons
。继续前进,您可以在一个地方更改所有按钮。