2009-04-13 8 views
1

J'ai une page * .aspx qui contient une zone de texte et un bouton. Lorsque l'utilisateur entre des informations dans la zone de texte et clique sur "Publier", il insère les données dans ma base de données SQL. Le problème est que, si l'utilisateur clique sur Actualiser, il continuera d'insérer les mêmes données dans la base de données. Je suis à peu près sûr que toute la méthode "clic" est appelée, pas seulement l'appel d'insertion. J'ai essayé de déconner avec des sessions mais il se plaint. Je ne suis pas vraiment sûr de ce qu'il faut faire. Je suis à la recherche d'une solution simple et facile.Asp.Net SQL Actualiser les insertions de la page en double?

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

duplication possible de [Comment empêcher les publications répétées de perturber ma couche de gestion] (http://stackoverflow.com/questions/481564/how-to-prevent-repeated-postbacks-from-confusing-my-business-layer) –

Répondre

-1

s'il rafraîchit ou appuyez sur le bouton de retour le poste se produira à nouveau, ainsi votre page traitera les mêmes données insérons une nouvelle fois.

Vous devez changer votre logique

0

Si le PostButton_Click est le gestionnaire de serveur pour l'événement, cliquez sur le bouton puis insérez le code shold être exécuté que si l'utilisateur clique sur le bouton de poste - il ne devrait pas se produire en cas de rafraîchir.

Je suis assez sûr ne suffit pas - pour être sûr mis un point d'arrêt dans votre méthode PostButton_Click, appuyez sur F5 pour exécuter en mode débogage et voir si le point d'arrêt est frappé avec un rafraîchissement.

Si oui, cela signifie que:

  1. vous appelez explicitement PostButton_Click de quelque part autre (? Page_Load)
  2. PostButton_Click a été accidentellement ensemble comme gestionnaire d'événements pour un autre événement sur la page

Un moyen rapide de vérifier l'hypotèse 1 & 2 est de ru n recherchez PostButton_Click et voyez d'où vous l'appelez ou s'il est défini comme gestionnaire pour un autre élément (peut-être votre forme?) dans le balisage.

-1

Il serait préférable de rediriger le client vers une autre page après l'insertion. Cependant, si vous avez vraiment besoin que le client reste sur la même page, vous pouvez utiliser une variable (bool) sur votre page pour indiquer si l'insertion a a été fait, et ignorer la logique d'insertion si elle a été exécutée avant

0

Ajouter Response.Redirect (Request.Url.ToString(), false); à votre événement de bouton et cela devrait résoudre le problème.

Questions connexes