如何避免刷新页面上的按钮事件

时间:2010-01-30 10:05:20

标签: asp.net events refresh

我有.aspx页面,该页面在点击按钮时将数据插入数据库。但是,当我按下按钮时,它正确。我将Successfully消息称为“成功插入数据”。在这种情况下,如果我按“F5”或刷新页面,它将触发按钮单击事件。为什么会这样?如何避免这种情况?

4 个答案:

答案 0 :(得分:10)

当用户点击 F5 (或使用工具栏按钮刷新页面)时,导致与上一个请求相同的新请求被发送到服务器。将再次引发Button.Click事件 ,但您有几种方法可以防止自己插入数据两次。

最好的方法,恕我直言,是使用Post/Redirect/Get pattern。在您的代码中,在保存数据的位置之后,执行302重定向到确认页面:

protected void btnSaveStuff_Click(object sender, EventArgs e)
{
    SaveStuffToDatabase();
    Response.Redirect("confirmation.aspx");
}

使用模式时,原始页面的POST不会在浏览器历史记录中结束,刷新结果页面将导致最终GET重复,这应该是安全的。

答案 1 :(得分:4)

在课堂上添加:

#region Browser Refresh
private bool refreshState;
private bool isRefresh;

protected override void LoadViewState(object savedState)
{
    object[] AllStates = (object[])savedState;
    base.LoadViewState(AllStates[0]);
    refreshState = bool.Parse(AllStates[1].ToString());
    if (Session["ISREFRESH"] != null && Session["ISREFRESH"] != "")
        isRefresh = (refreshState == (bool)Session["ISREFRESH"]);
}

protected override object SaveViewState()
{
    Session["ISREFRESH"] = refreshState;
    object[] AllStates = new object[3];
    AllStates[0] = base.SaveViewState();
    AllStates[1] = !(refreshState);
    return AllStates;
}

#endregion 

在按钮中单击执行以下操作:

protected void Button1_Click(object sender, EventArgs e)
{
    if (isRefresh == false)
    {
        Insert Code here

答案 2 :(得分:1)

添加更新面板,并将更新面板的更新模式设置为“条件”。 这对我有用!!

答案 3 :(得分:0)

刷新将重新提交您上次点击按钮时发布的表单。

通常,当您刷新页面时,您会想到再次获取页面或执行HTTP GET,但由于您最后做的是POST(当您单击提交按钮时),浏览器将再次执行帖子尝试调用相同的响应。

我建议使用Jorn Schou-Rode建议的发布/重定向/获取模式。

这篇文章似乎也很相关。 http://aspalliance.com/687_Preventing_Duplicate_Record_Insertion_on_Page_Refresh