Asp.Net SQL刷新页面重复插入?

时间:2009-04-13 13:57:49

标签: asp.net sql post refresh

我有一个* .aspx页面,其中包含一个文本框和一个按钮。当用户在文本框中输入信息并单击post时,它会将数据插入到我的sql数据库中。问题是,如果用户点击刷新,它将继续将相同的数据插入数据库。我很确定调用整个“click”方法,而不仅仅是插入调用。我试过搞乱会话,但它抱怨。我不确定该怎么做。我正在寻找一个简单易行的解决方案。

protected void PostButton_Click(object sender, EventArgs e)
{
    string wpost = (string)Session["WallPost"];
    DateTime wtime = (DateTime)Session["WallDateTime"];
    if (txtWallPost.Text.Length > 0 && !wpost.Equals(txtWallPost.Text))
    {
        string strCon = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["SocialSiteConnectionString"].ConnectionString;
        using (SqlConnection conn = new SqlConnection(strCon))
        {
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = "INSERT INTO [WallTable] ([UserId], [FriendId], [WallPost]) VALUES (@UserId, @FriendId, @WallPost)";
                cmd.Parameters.AddWithValue("@UserId", User.Identity.Name);
                cmd.Parameters.AddWithValue("@FriendId", User.Identity.Name);
                cmd.Parameters.AddWithValue("@WallPost", txtWallPost.Text);
                conn.Open();
                cmd.ExecuteNonQuery();
                Session.Add("WallPost", txtWallPost.Text);
                Session.Add("WallDateTime", new DateTime());
                conn.Close();
                txtWallPost.Text = "";
                LoadWallPosts();
            }
        }
    }
    return;
}

4 个答案:

答案 0 :(得分:0)

如果PostButton_Click是按钮上的click事件的服务器处理程序,则只有当用户点击post按钮时才会执行插入代码shold - 在刷新的情况下不应该执行。

我非常确定是不够的 - 确保在PostButton_Click方法中设置断点,点击F5以在调试模式下运行并查看断点是否因刷新而被点击

如果是这样意味着:

  1. 你明确地打电话 从某个地方PostButton_Click else(Page_Load?)
  2. PostButton_Click意外发生了 设置为其他一些事件处理程序 页面上的活动
  3. 快速验证hypoteis 1& amp; 2是运行搜索PostButton_Click并查看您从哪里调用它,或者它是否设置为标记中某些其他元素(可能是您的表单?)的处理程序。

答案 1 :(得分:0)

添加Response.Redirect(Request.Url.ToString(),false);你的按钮事件,这应该解决问题。

答案 2 :(得分:-1)

如果他刷新或按后退按钮,帖子将再次发生,因此您的页面将处理相同的数据,从而再次插入。

你必须改变你的逻辑

答案 3 :(得分:-1)

最好在插入后将客户端重定向到另一个页面,但是,如果您确实需要客户端保留在同一页面中,则可以在页面上使用(bool)变量来说明插入是否已经完成,如果在

之前执行了,则跳过插入逻辑