用户单击刷新时阻止添加新记录

时间:2012-10-06 04:50:07

标签: c# asp.net sql

你好我有问题,每当我按下刷新按钮它不断添加:/我如何防止它?这是我的第二天弄清楚我失败了:(

protected void Button1_Click(object sender, EventArgs e)
        {
            //Instantiate the connection with the database 
            using (SqlConnection myConnection = new SqlConnection("user id=username;" +
                                                                  "password=password;" +
                                                                  "trusted_connection=yes;" +
                                                                  "database=DataBaseConnection;" +
                                                                  "connection timeout=30;"))
            {
                //Open the Connection object
                myConnection.Open();

                //Instantiate a SQL Command with an INSERT query
                SqlCommand myCommand = new SqlCommand("INSERT INTO BasicInfo (Firstname,Surname) Values(@a,@b);", myConnection);

                if (TextBox1.Text !=null && TextBox2.Text != null)
                {
                    //Texbox 
                    myCommand.Parameters.AddWithValue("@a", TextBox1.Text);
                    myCommand.Parameters.AddWithValue("@b", TextBox2.Text);

                    //Execute the query
                    myCommand.ExecuteNonQuery();
                }
                else
                {
                    //Code HEre?
                }

2 个答案:

答案 0 :(得分:4)

解决此问题的一种方法是在Response.Redirect事件结束时将Button1_Click恢复原始页面。 Response.Redirect将使浏览器对页面执行GET请求,因此如果用户点击F5,他们将只重做GET(而不是再次POST表单)。

此方法有时称为Post / Redirect / Get模式。这篇博文有一个非常好的方法写法: http://blog.andreloker.de/post/2008/06/Post-Redirect-Get.aspx

答案 1 :(得分:0)

防止多次处理的一种策略是将标记分配给每个表单,作为隐藏字段。

完成响应提交表单所需的任何处理后,您将撤销令牌。

或者,将令牌保存为处理的一部分,并在处理中添加一个检查,以便首先查看该令牌是否已被使用。

这有助于您可能会收到两次请求的任何情况,例如,如果用户双击按钮或链接。