yuezhonghu

悠然现南山...
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

gridview的rowcommand事件执行两次(ImageButton禁用) Q

Posted on 2008-05-21 13:12  .狐狸血.  阅读(1188)  评论(1编辑  收藏  举报
做项目的时候发现一个问题,就是当gridview中使用Imagebutton时,gridview的rowcommand事件执行两次。开始以为是自己的代码写的有问题,仔细检查后感觉原因不在代码。上网查询了一下,原来是asp.net的一个bug。
  点击按钮会向iis发两次请求,第一次比第二次少八个字节,导致第一次请求不成功,接着会重新发一次,因此最容易想到的就是忽略第一次请求,下面的第一种解决方式就是如此。<BR>&nbsp;&nbsp; 目前有两个解决方案,都不完善,第一个是在rowcommand事件中加入下面的语句

  if (Request["x"] == null &amp;&amp; Request["y"] == null

    Response.End();

  通过这条语句,判断图片的坐标,如果其坐标是null,则是第一次请求,因为第一次请求无效,结束他。

  第二个是微软推荐的:尽量不在gridview里面用imagebutton,而用link或者button,如果必须用可以用类似的代码:

<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton runat=server id="ImageButton1" CommandName="Delete"
ImageUrl="" commandargument='<%# DataBinder.Eval(Container,
"RowIndex") %>' OnCommand="ImageButton1_Command" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>


protected void ImageButton1_Command(object sender, CommandEventArgs e) {
......;

}