【问题标题】:Asp.Net SQL Refresh page duplicate inserts?Asp.Net SQL刷新页面重复插入?
【发布时间】:2010-10-19 03:22:23
【问题描述】:

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

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;
}

【问题讨论】:

标签: asp.net sql post refresh


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    我很确定 是不够的 - 确保在您的 PostButton_Click 方法中放置一个断点,按 F5 以在调试模式下运行,然后查看是否刷新断点。

    如果是这样,那就意味着:

    1. 您正在显式调用 PostButton_Click 来自某处 否则 (Page_Load?)
    2. PostButton_Click 不小心 设置为其他一些事件处理程序 页面上的事件

    验证假设 1 和 2 的快速方法是搜索 PostButton_Click 并查看您从哪里调用它,或者它是否设置为标记中某个其他元素(可能是您的表单?)的处理程序。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        你必须改变你的逻辑

        【讨论】:

          猜你喜欢
          • 2019-04-19
          • 2012-08-17
          • 2012-05-23
          • 2011-04-13
          • 1970-01-01
          • 1970-01-01
          • 2019-10-14
          • 2014-03-09
          • 2015-09-07
          相关资源
          最近更新 更多