gridview中的按钮类型用如果用image,触发rowcommand事件时会被执行两次,据说只出现在IE6,IE5、firefox等没有问题,我的IE7也存在同样问题,似乎和IIS版本也有关系,期待微软的补丁。 protected void ImageButton1_Command(object sender, CommandEventArgs e) {
今天下午一遇到一个问题,gridview 的rowcommand事件会被执行两次,postback也会执行两次,最初还怀疑是调试器的问题,经过察看日志,确定真的被执行了两次。
代码检查了n遍,逐句排除,仍没有找到问题,已经开始怀疑是鼠标了,抓包发现确实是发了两次请求,并且第一次请求没有被处理。偶尔一次把buttontype从image换到button,意外的好了,只被执行了一次,看来问题只出在Imagebutton。
通过google搜索发现有不少人遇到了此问题,确定是asp.net的bug。点击按钮会向iis发两次请求,第一次比第二次少八个字节,导致第一次请求不成功,接着会重新发一次,因此最容易想到的就是忽略第一次请求,下面的第一种解决方式就是如此。
目前有两个解决方案,都不完善,第一个是在rowcommand事件中加入下面的语句:
if (Request[“x”] == null && 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>
GridView1.DeleteRow(Int32.Parse(e.CommandArgument.ToString()));
}
把imagebuttong加入到TemplateField中,并且在事件中调用deleterow。
不知道还有没有更好的解决方案,下面的论坛详细的讨论了这个问题:
http://www.developersdex.com/asp/message.asp?p=1116&r=4641456&page=2第一页讨论的结果是:只有在button的类型是image的情况下才会有此问题,可以略过不看,后面两页有详细的讨论和解决方式。
今天一天一直在遇到奇怪问题,头大了,相同的代码经常一会可以执行,一会儿不可以,vs2005也一直出怪事。刚才把下午不能运行的几个问题在家模拟了一下竟然运行良好!!明天又要头痛了
http://www.cnblogs.com/bluewater/archive/2006/11/21/567871.html
asp.net的一个bug的发现和解决_asp.net技巧
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » asp.net的一个bug的发现和解决_asp.net技巧
相关推荐
-      对.net framework 反射的反思_asp.net技巧
-      .net3.5和vs2008中的asp.net ajax_asp.net技巧
-      使用asp.net ajax框架扩展html map控件_asp.net技巧
-      asp.net应用程序资源访问安全模型_asp.net技巧
-      photoshop初学者轻松绘制螺旋漩涡特效_photoshop教程
-      photoshop通道结合图层模式抠狗尾巴草_photoshop教程
-      web.config详解+asp.net优化_asp.net技巧
-      asp.net中多彩下拉框的实现_asp.net技巧