2

您好,每当我按下刷新按钮时,我都会遇到问题,它会不断添加:/我该如何防止它?这是我第 2 天想出来的,但我失败了:(

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?
                }
4

2 回答 2

4

处理此问题的一种方法是Response.RedirectButton1_Click事件结束时返回原始页面。这Response.Redirect将使浏览器对页面执行 GET 请求,因此如果用户按 F5,他们将只重做 GET(而不是再次 POST 表单)。

这种方法有时被称为 Post/Redirect/Get 模式。这篇博客文章很好地描述了这种方法: http ://blog.andreloker.de/post/2008/06/Post-Redirect-Get.aspx

于 2012-10-06T04:58:14.160 回答
0

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

一旦完成响应提交的表单所需的任何处理,您就可以撤销令牌。

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

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

于 2012-10-06T05:03:50.357 回答