Se você usar imagem como tipo de botão no gridview, o evento rowcommand será executado duas vezes quando for acionado. Diz-se que só aparece no IE6, IE5, firefox, etc. problema. Parece estar relacionado à versão do IIS. Estou ansioso pelo patch da Microsoft.
Encontrei um problema esta tarde. O evento rowcommand do gridview foi executado duas vezes e o postback também foi executado duas vezes. A princípio, suspeitei que fosse um problema com o depurador. executado duas vezes.
Verifiquei o código n vezes e o eliminei frase por frase, mas ainda assim nenhum problema foi encontrado. Comecei a suspeitar que era o mouse. Capturei o pacote e descobri que duas solicitações foram realmente enviadas, e a primeira solicitação não foi processada. . Ocasionalmente, mudei o tipo de botão de imagem para botão e funcionou inesperadamente. Parece que o problema está apenas no Imagebutton.
Através da pesquisa no Google, descobri que muitas pessoas encontraram esse problema e é definitivamente um bug do asp.net. Clicar no botão enviará duas solicitações para o iis. A primeira vez é oito bytes a menos que a segunda vez, fazendo com que a primeira solicitação não seja bem-sucedida e, em seguida, ela será enviada novamente. primeira solicitação, como segue Esta é a primeira solução.
Atualmente existem duas soluções, nenhuma das quais é perfeita. A primeira é adicionar a seguinte instrução ao evento rowcommand:
if (Solicitação["x"] == nulo && Solicitação["y"] == nulo)
Response.End();
Através desta instrução, as coordenadas da imagem são determinadas. Se as coordenadas forem nulas, é a primeira solicitação, pois a primeira solicitação é inválida.
O segundo é recomendado pela Microsoft: tente não usar imagebutton no gridview, mas use link ou button Se precisar usar, você pode usar um código semelhante:
<asp:GridView ID="GridView1" runat="servidor">
<Colunas>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton runat=server id="ImageButton1" CommandName="Excluir"
ImageUrl="" commandargument='<%# DataBinder.Eval(Container,
"RowIndex") %>' OnCommand="ImageButton1_Command" />
</ItemTemplate>
</asp:TemplateField>
</Colunas>
</asp:GridView>
protegido void ImageButton1_Command(objeto remetente, CommandEventArgs e) {
GridView1.DeleteRow(Int32.Parse(e.CommandArgument.ToString()));
}
Adicione imagebuttong a TemplateField e chame deleterow no evento.
Não sei se existe uma solução melhor. O fórum a seguir discute esse problema em detalhes:
http://www.developersdex.com/asp/message.asp?p=1116&r=4641456&page=2 O resultado da discussão na primeira página é: Este problema só ocorrerá quando o tipo de botão for imagem, que pode ser ignorado Não leia, há discussões e soluções detalhadas nas próximas duas páginas.
Tenho encontrado problemas estranhos o dia todo e minha cabeça está girando. O mesmo código muitas vezes pode ser executado por um tempo, mas não por um tempo, e coisas estranhas continuam acontecendo no vs2005. Acabei de simular vários problemas que não podiam ser resolvidos à tarde em casa e funcionou bem! ! Vou ter dor de cabeça de novo amanhã
http://www.cnblogs.com/bluewater/archive/2006/11/21/567871.html