Si vous utilisez image comme type de bouton dans GridView, l'événement rowcommand sera exécuté deux fois lorsqu'il sera déclenché. On dit qu'il n'apparaît que dans IE6, IE5, Firefox, etc. Il n'y a pas de problème avec Mon IE7 également. problème. Cela semble être lié à la version IIS. J'attends avec impatience le patch Microsoft.
J'ai rencontré un problème cet après-midi. L'événement rowcommand de GridView a été exécuté deux fois, et la publication a également été exécutée deux fois. Au début, j'ai soupçonné qu'il s'agissait d'un problème avec le débogueur. Après avoir vérifié le journal, j'ai confirmé qu'il s'agissait bien d'un problème. exécuté deux fois.
J'ai vérifié le code n fois et je l'ai éliminé phrase par phrase, mais aucun problème n'a été trouvé. J'ai commencé à soupçonner que c'était la souris. J'ai capturé le paquet et j'ai constaté que deux requêtes avaient effectivement été envoyées et que la première requête n'avait pas été traitée. . Parfois, j'ai changé le type de bouton d'image en bouton, et cela a fonctionné de manière inattendue. Il n'a été exécuté qu'une seule fois. Il semble que le problème réside uniquement dans Imagebutton.
Grâce à la recherche Google, j'ai découvert que de nombreuses personnes ont rencontré ce problème et qu'il s'agit certainement d'un bug asp.net. Cliquer sur le bouton enverra deux requêtes à iis. La première fois est inférieure de huit octets à la deuxième fois, ce qui entraînera l'échec de la première requête, puis elle sera renvoyée. Par conséquent, la chose la plus simple à penser est d'ignorer le. première requête, comme suit. C'est la première solution.
Il existe actuellement deux solutions, dont aucune n'est parfaite. La première consiste à ajouter l'instruction suivante à l'événement rowcommand :
if (Request["x"] == null && Request["y"] == null)
Réponse.End();
Grâce à cette instruction, les coordonnées de l'image sont déterminées. Si les coordonnées sont nulles, c'est la première requête. Car la première requête n'est pas valide, mettez-y fin.
Le second est recommandé par Microsoft : essayez de ne pas utiliser imagebutton dans GridView, mais utilisez link ou Button. Si vous devez l'utiliser, vous pouvez utiliser un code similaire :
<asp:GridView ID="GridView1" runat="server">
<Colonnes>
<asp:TemplateField>
<Modèle d'élément>
<asp:ImageButton runat=server id="ImageButton1" CommandName="Delete"
ImageUrl="" commandargument='<%# DataBinder.Eval(Conteneur,
"RowIndex") %>' OnCommand="ImageButton1_Command" />
</ItemTemplate>
</asp:TemplateField>
</Colonnes>
</asp:GridView>
protected void ImageButton1_Command (expéditeur d'objet, CommandEventArgs e) {
GridView1.DeleteRow(Int32.Parse(e.CommandArgument.ToString()));
}
Ajoutez imagebuttong à TemplateField et appelez deleterow dans l'événement.
Je ne sais pas s'il existe une meilleure solution. Le forum suivant discute de ce problème en détail :
http://www.developersdex.com/asp/message.asp?p=1116&r=4641456&page=2 Le résultat de la discussion sur la première page est : Ce problème ne se produira que lorsque le type de bouton est une image, qui peut être ignoré Ne le lisez pas, il y a des discussions détaillées et des solutions sur les deux pages suivantes.
J'ai rencontré des problèmes étranges toute la journée aujourd'hui et j'ai la tête qui tourne souvent pendant un certain temps, mais pas pendant un certain temps, et des choses étranges continuent de se produire dans vs2005. Je viens de simuler plusieurs problèmes qui ne pouvaient pas être exécutés l'après-midi à la maison et ça a bien fonctionné ! ! Je vais encore avoir mal à la tête demain
http://www.cnblogs.com/bluewater/archive/2006/11/21/567871.html