两次按下Firefox上的asp.net按钮的奇怪行为

时间:2011-10-18 12:22:37

标签: asp.net firefox

如果我有这个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应用程序总是如此,这确实是一个大问题。或者我做错了什么?

提前致谢。

2 个答案:

答案 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。继续前进,您可以在一个地方更改所有按钮。