你好我有问题,每当我按下刷新按钮它不断添加:/我如何防止它?这是我的第二天弄清楚我失败了:(
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?
}
答案 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)
防止多次处理的一种策略是将标记分配给每个表单,作为隐藏字段。
完成响应提交表单所需的任何处理后,您将撤销令牌。
或者,将令牌保存为处理的一部分,并在处理中添加一个检查,以便首先查看该令牌是否已被使用。
这有助于您可能会收到两次请求的任何情况,例如,如果用户双击按钮或链接。