日期:2014-05-18  浏览次数:20513 次

刷新一次,就插入一次数据 怎么防止?
我是通过按钮来插入数据的


C# code
    protected void Button1_Click1(object sender, EventArgs e)
    {

        if (TextBox1.Text != "" && TextBox2.Text != "")
        {
            if (SqlStore.insert_youqing(TextBox1.Text, TextBox2.Text) == 0)
            {
                GridView1.DataBind();
                TextBox1.Text = "";
                TextBox2.Text = "";
            }
        }

    }


用IsPostBack该怎么写?  

或者是别的方法?

------解决方案--------------------
用AJAX,或者你自己提交后禁用按钮,或者提交成功跳转到别的页面,或者是提交后清空输入内容。
------解决方案--------------------
从“技术”上是不可能“防止”的。因为“刷新”操作是许多浏览器的特性,都是可以重复提交前一个请求。

要想防止,那么你要在数据处理业务逻辑上去防止。也就是说接受“客户端会重复提交数据”的这个事实,然后用后台数据处理流程来防止。

例如在聊天中,假设一个人刚刚已经在邀请另外一个人了,那么重复发送邀请时你要么就忽略它,要么就告诉用户“已经邀请过了”这就行了,而不用真的发出两次邀请。

只有很少的情况下,简单的业务逻辑判断可能不足,那么你可以写一个“时间戳”标记。例如你可以每一次输出界面时先在ViewState中记录一个随机编号,然后把它记录到后台文件或者数据库中。然后在SqlStore.insert_youqing执行之前,首先核对ViewState中的标记跟数据库中的标记是否一致,不一致就说明用户很可能是使用“刷新”来提交的。

最后要知道,假设你使用UpdatePanel控件,完全可以避免“刷新”时重复提交的问题。