Asp.Net SQL Обновить страницу дубликатов вставок? - PullRequest
1 голос
/ 13 апреля 2009

У меня есть страница * .aspx, которая содержит текстовое поле и кнопку. Когда пользователь вводит информацию в текстовое поле и щелкает сообщение, он вставляет данные в мою базу данных 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 голосов
/ 21 января 2013

Добавить Response.Redirect (Request.Url.ToString (), false); на событие вашей кнопки, и это должно решить проблему.

0 голосов
/ 13 апреля 2009

Если PostButton_Click является обработчиком сервера для события click на вашей кнопке, то вставка кода будет выполняться только в том случае, если пользователь нажмет кнопку post - это не должно происходить в случае обновления.

Я почти уверен, что недостаточно - для уверенности установите точку останова в вашем методе PostButton_Click, нажмите F5 для запуска в режиме отладки и посмотрите, будет ли точка останова обновлена.

Если это так, значит:

  1. вы звоните явно PostButton_Click откуда-то еще (Page_Load?)
  2. PostButton_Click был случайно установить в качестве обработчика событий для некоторых других событие на странице

Быстрый способ проверки гипотезы 1 и 2 - запустить поиск по PostButton_Click и посмотреть, откуда вы его вызываете или установлен ли он как обработчик для какого-либо другого элемента (возможно, вашей формы?) В разметке.

0 голосов
/ 13 апреля 2009

Было бы предпочтительно перенаправить клиента на другую страницу после вставки, однако, если вам действительно нужно, чтобы клиент оставался на той же странице, вы можете использовать переменную (bool) на своей странице, чтобы указать, была ли вставка готово, и пропустите логику вставки, если она была выполнена до

0 голосов
/ 13 апреля 2009

если он обновит или нажмет кнопку "назад", сообщение будет повторяться, поэтому ваша страница будет обрабатывать те же данные, поэтому вставлять еще раз.

Вы должны изменить свою логику

...