1

テキスト ボックスとボタンを含む *.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;
}
4

4 に答える 4

0

Response.Redirect(Request.Url.ToString()、false);を追加します。あなたのボタンイベントにそしてそれは問題を解決するはずです。

于 2013-01-20T21:20:19.380 に答える
0

PostButton_Clickがボタンのクリックイベントのサーバーハンドラーである場合、挿入コードは、ユーザーが投稿ボタンを押した場合にのみ実行されます。更新の場合は発生しません。

PostButton_Clickメソッドにブレークポイントを設定し、F5キーを押してデバッグモードで実行し、ブレークポイントが更新でヒットするかどうかを確認するには、十分ではないと確信しています。

もしそうなら、それはそれを意味します:

  1. 他の場所から明示的に呼び出し PostButton_Clickています(Page_Load?)
  2. PostButton_Clickページ上の他のイベントのイベントハンドラーとして誤って設定された

仮説1と2を検証する簡単な方法は、検索を実行して、PostButton_Clickどこから呼び出しているか、またはマークアップ内の他の要素(おそらくフォーム?)のハンドラーとして設定されているかどうかを確認することです。

于 2009-04-13T14:22:10.923 に答える
-1

挿入後にクライアントを別のページにリダイレクトすることが望ましいですが、クライアントが同じページにとどまることが本当に必要な場合は、ページで (bool) 変数を使用して、挿入が完了したかどうかを示すことができます。以前に実行された場合は挿入ロジックをスキップします

于 2009-04-13T15:02:44.367 に答える
-1

彼が更新するか戻るボタンを押すと、投稿が再び行われるため、ページは同じデータを処理してもう一度挿入します。

ロジックを変更する必要があります

于 2009-04-13T14:02:14.513 に答える