グリッドビューでボタンの種類として画像を使用すると、トリガー時に rowcommand イベントが 2 回実行されます。これは IE6、IE5、Firefox などでのみ発生すると言われています。私の IE7 も同様です。 IIS のバージョンに関係しているようです。Microsoft のパッチを待ちます。
今日の午後に問題が発生しました。gridview の rowcommand イベントが 2 回実行され、ポストバックも 2 回実行されました。最初はデバッガの問題かと思いましたが、ログを確認したところ、実際に問題が発生していました。 2回実行されました。
コードを n 回チェックし、一文ずつ削除しましたが、それでも問題は見つかりませんでした。パケットをキャプチャしたところ、確かに 2 つのリクエストが送信され、最初のリクエストが処理されなかったことがわかりました。 。時々、ボタンの種類をイメージからボタンに変更しましたが、それは一度だけ実行されました。問題はイメージボタンにのみあるようです。
Google 検索を通じて、多くの人がこの問題に遭遇していることがわかりました。これは間違いなく asp.net のバグです。ボタンをクリックすると、iis に 2 つのリクエストが送信されます。1 回目は 2 回目よりも 8 バイト少ないため、最初のリクエストは失敗し、その後、再度送信されます。したがって、最も簡単に考えられるのは、このリクエストを無視することです。最初のリクエストは次のとおりです。これが最初の解決策です。
現在、解決策は 2 つありますが、どちらも完璧ではありません。1 つ目は、rowcommand イベントに次のステートメントを追加することです。
if (Request["x"] == null && Request["y"] == null)
Response.End();
このステートメントにより、画像の座標が決定されます。座標が null の場合、それは最初のリクエストです。最初のリクエストは無効であるため、終了します。
2 番目の方法は Microsoft によって推奨されています。グリッドビューではイメージボタンを使用せず、リンクまたはボタンを使用する必要がある場合は、同様のコードを使用できます。
<asp:GridView ID="GridView1" runat="server">
<コラム>
<asp:テンプレートフィールド>
<アイテムテンプレート>
<asp:ImageButton runat=server id="ImageButton1" CommandName="削除"
ImageUrl="" commandargument='<%# DataBinder.Eval(コンテナ,
"RowIndex") %>' OnCommand="ImageButton1_Command" />
</ItemTemplate>
</asp:テンプレートフィールド>
</列>
</asp:GridView>
protected void ImageButton1_Command(オブジェクト送信者, CommandEventArgs e) {
GridView1.DeleteRow(Int32.Parse(e.CommandArgument.ToString()));
}
imagebuttong を TemplateField に追加し、イベントで deleterow を呼び出します。
これより良い解決策があるかどうかはわかりません。次のフォーラムでこの問題について詳しく説明されています。
http://www.developersdex.com/asp/message.asp?p=1116&r=4641456&page=2最初のページの議論の結果は次のとおりです。この問題は、ボタンのタイプがイメージの場合にのみ発生します。スキップしました。読まないでください。次の 2 ページに詳細な議論と解決策が記載されています。
今日は一日中奇妙な問題に遭遇していて、頭がクラクラしています。同じコードがしばらく実行できることもあれば、しばらく実行できないことがよくあり、vs2005 では奇妙なことが起こり続けます。午後に実行できなかったいくつかの問題を家でシミュレーションしたところ、うまくいきました。 !明日からまた頭が痛くなりそうだ
http://www.cnblogs.com/bluewater/archive/2006/11/21/567871.html