2

こんにちは、更新ボタンを押すたびに追加し続ける問題があります:/どうすればそれを防ぐことができますか? これを理解するのに2日目でしたが、失敗しました:(

protected void Button1_Click(object sender, EventArgs e)
        {
            //Instantiate the connection with the database 
            using (SqlConnection myConnection = new SqlConnection("user id=username;" +
                                                                  "password=password;" +
                                                                  "trusted_connection=yes;" +
                                                                  "database=DataBaseConnection;" +
                                                                  "connection timeout=30;"))
            {
                //Open the Connection object
                myConnection.Open();

                //Instantiate a SQL Command with an INSERT query
                SqlCommand myCommand = new SqlCommand("INSERT INTO BasicInfo (Firstname,Surname) Values(@a,@b);", myConnection);

                if (TextBox1.Text !=null && TextBox2.Text != null)
                {
                    //Texbox 
                    myCommand.Parameters.AddWithValue("@a", TextBox1.Text);
                    myCommand.Parameters.AddWithValue("@b", TextBox2.Text);

                    //Execute the query
                    myCommand.ExecuteNonQuery();
                }
                else
                {
                    //Code HEre?
                }
4

2 に答える 2

4

この問題を処理する 1 つの方法Response.Redirectは、イベントの最後Button1_Clickに元のページに戻ることです。これResponse.Redirectにより、ブラウザーはページの GET 要求を実行するようになるため、ユーザーが F5 キーを押すと、GET をやり直すだけです (フォームを再度 POST することはありません)。

このアプローチは、Post/Redirect/Get パターンと呼ばれることもあります。このブログ投稿には、アプローチのかなり良い記事があります: http://blog.andreloker.de/post/2008/06/Post-Redirect-Get.aspx

于 2012-10-06T04:58:14.160 に答える
0

何かを複数回処理するのを防ぐ 1 つの戦略は、非表示フィールドとして各フォームにトークンを割り当てることです。

フォームの送信に応じて必要な処理が完了したら、トークンを取り消します。

または、処理の一部としてトークンを保存し、処理にチェックを追加して、そのトークンが既に使用されているかどうかを最初に確認します。

これは、ユーザーがボタンまたはリンクをダブルクリックした場合など、リクエストを 2 回受け取る可能性があるシナリオで役立ちます。

于 2012-10-06T05:03:50.357 に答える