그리드뷰에서 이미지를 버튼형으로 사용하면, rowcommand 이벤트가 발생하면 IE6, IE5, Firefox 등에서만 나타난다고 합니다. 제 IE7도 마찬가지입니다. 문제는 IIS 버전과 관련된 것 같습니다. Microsoft 패치를 기대합니다.
오늘 오후에 문제가 발생했습니다.gridview의 rowcommand 이벤트가 두 번 실행되었고, postback도 두 번 실행되었습니다. 처음에는 디버거에 문제가 있는 것으로 의심하여 확인했습니다. 두 번 실행되었습니다.
코드를 n번 확인하고 한 문장씩 삭제했지만 여전히 문제가 발견되지 않았습니다. 패킷을 캡처한 결과 실제로 두 개의 요청이 전송되었으며 첫 번째 요청이 처리되지 않았습니다. . 가끔 버튼 종류를 이미지에서 버튼으로 변경했는데, 예상치 않게 작동이 되더군요. 이미지버튼에만 문제가 있는 것 같습니다.
Google 검색을 통해 많은 사람들이 이 문제를 겪었다는 것을 알았는데 이는 확실히 asp.net 버그입니다. 버튼을 클릭하면 iis에 두 개의 요청이 전송됩니다. 첫 번째 요청은 두 번째 요청보다 8바이트 적어서 첫 번째 요청이 실패하고 다시 전송됩니다. 따라서 가장 쉬운 방법은 무시하는 것입니다. 첫 번째 요청은 다음과 같습니다. 이것이 첫 번째 해결 방법입니다.
현재 두 가지 솔루션이 있지만 둘 다 완벽하지는 않습니다. 첫 번째는 rowcommand 이벤트에 다음 문을 추가하는 것입니다.
if (요청["x"] == null && 요청["y"] == null)
응답.끝();
이 문을 통해 이미지의 좌표가 결정됩니다. 좌표가 null이면 첫 번째 요청이 유효하지 않으므로 종료합니다.
두 번째는 Microsoft에서 권장하는 것입니다. 그리드뷰에서는 이미지 버튼을 사용하지 말고 링크나 버튼을 사용해야 하는 경우 유사한 코드를 사용할 수 있습니다.
<asp:GridView ID="GridView1" runat="서버">
<열>
<asp:템플릿 필드>
<항목 템플릿>
<asp:ImageButton runat=server id="ImageButton1" CommandName="삭제"
ImageUrl="" commandargument='<%# DataBinder.Eval(컨테이너,
"RowIndex") %>' OnCommand="ImageButton1_Command" />
</ItemTemplate>
</asp:TemplateField>
</열>
</asp:GridView>
protected void ImageButton1_Command(객체 전송자, CommandEventArgs e) {
GridView1.DeleteRow(Int32.Parse(e.CommandArgument.ToString()));
}
TemplateField에 imagebuttong을 추가하고 이벤트에서 deleterow를 호출합니다.
더 나은 해결책이 있는지는 모르겠습니다. 다음 포럼에서는 이 문제에 대해 자세히 설명합니다.
http://www.developersdex.com/asp/message.asp?p=1116&r=4641456&page=2 첫 번째 페이지에 대한 토론 결과는 다음과 같습니다. 이 문제는 버튼 유형이 이미지인 경우에만 발생합니다. 건너뛰었습니다. 읽지 마세요. 다음 두 페이지에 자세한 토론과 해결 방법이 있습니다.
오늘 하루종일 이상한 문제에 부딪혀 머리가 어지러워졌습니다. 같은 코드가 한동안 실행이 되는 경우가 종종 있는데, vs2005에서는 계속해서 이상한 일이 발생합니다. 방금 집에서 오후에 실행할 수 없는 몇 가지 문제를 시뮬레이션해 보았는데 잘 작동했습니다! ! 내일 또 머리가 아플 것 같아
http://www.cnblogs.com/bluewater/archive/2006/11/21/567871.html