Wenn Sie in Gridview ein Bild als Schaltflächentyp verwenden, wird das Rowcommand-Ereignis zweimal ausgeführt, wenn es ausgelöst wird. Es wird gesagt, dass es nur in IE6, IE5, Firefox usw. erscheint. Es gibt auch kein Problem Das Problem scheint mit der IIS-Version zusammenzuhängen. Ich freue mich auf den Microsoft-Patch.
Ich bin heute Nachmittag auf ein Problem gestoßen, und das Postback wurde auch zweimal ausgeführt. Nachdem ich das Protokoll überprüft hatte, bestätigte ich, dass es tatsächlich so war zweimal ausgeführt.
Ich habe den Code n-mal überprüft und ihn Satz für Satz entfernt, aber es wurde immer noch kein Problem festgestellt. Ich begann zu vermuten, dass es sich um die Maus handelte. Ich habe das Paket erfasst und festgestellt, dass tatsächlich zwei Anfragen gesendet wurden und die erste Anfrage nicht verarbeitet wurde . Gelegentlich habe ich den Schaltflächentyp von „Bild“ auf „Schaltfläche“ geändert, und es wurde unerwarteterweise nur einmal ausgeführt. Es scheint, dass das Problem nur bei „Imagebutton“ liegt.
Durch die Google-Suche habe ich festgestellt, dass viele Leute auf dieses Problem gestoßen sind und es sich definitiv um einen asp.net-Fehler handelt. Durch Klicken auf die Schaltfläche werden zwei Anfragen an iis gesendet. Das erste Mal sind acht Bytes kleiner als das zweite Mal, was dazu führt, dass die erste Anfrage nicht erfolgreich ist. Daher ist es am einfachsten, sie zu ignorieren Die erste Anfrage lautet wie folgt. Dies ist die erste Lösung.
Derzeit gibt es zwei Lösungen, von denen keine perfekt ist. Die erste besteht darin, die folgende Anweisung zum rowcommand-Ereignis hinzuzufügen:
if (Request["x"] == null && Request["y"] == null)
Response.End();
Durch diese Anweisung werden die Koordinaten des Bildes ermittelt. Wenn die Koordinaten null sind, ist die erste Anfrage ungültig.
Die zweite Möglichkeit wird von Microsoft empfohlen: Versuchen Sie, in der Rasteransicht keine Image-Schaltfläche zu verwenden, sondern einen Link oder eine Schaltfläche. Wenn Sie diese verwenden müssen, können Sie einen ähnlichen Code verwenden:
<asp:GridView ID="GridView1" runat="server">
<Spalten>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton runat=server id="ImageButton1" CommandName="Delete"
ImageUrl="" commandargument='<%# DataBinder.Eval(Container,
"RowIndex") %>' OnCommand="ImageButton1_Command" />
</ItemTemplate>
</asp:TemplateField>
</Spalten>
</asp:GridView>
protected void ImageButton1_Command(object sender, CommandEventArgs e) {
GridView1.DeleteRow(Int32.Parse(e.CommandArgument.ToString()));
}
Fügen Sie imagebuttong zu TemplateField hinzu und rufen Sie deleterow im Ereignis auf.
Ich weiß nicht, ob es eine bessere Lösung gibt. Das folgende Forum diskutiert dieses Problem ausführlich:
http://www.developersdex.com/asp/message.asp?p=1116&r=4641456&page=2 Das Ergebnis der Diskussion auf der ersten Seite ist: Dieses Problem tritt nur auf, wenn der Typ der Schaltfläche ein Bild ist, was möglich ist übersprungen Nicht lesen, ausführliche Diskussionen und Lösungen finden Sie auf den nächsten beiden Seiten.
Ich bin heute den ganzen Tag auf seltsame Probleme gestoßen und mir schwirrt der Kopf. Derselbe Code kann oft eine Zeit lang ausgeführt werden, aber nicht eine Zeit lang, und in vs2005 passieren immer wieder seltsame Dinge. Ich habe gerade mehrere Probleme simuliert, die nicht nachmittags zu Hause ausgeführt werden konnten, und es hat gut funktioniert! ! Morgen werde ich wieder Kopfschmerzen haben
http://www.cnblogs.com/bluewater/archive/2006/11/21/567871.html