asp.net的一个bug的发现和解决
2008-10-30 10:47
417 查看
gridview中的按钮类型用如果用image,触发rowcommand事件时会被执行两次,据说只出现在IE6,IE5、firefox等没有问题,我的IE7也存在同样问题,似乎和IIS版本也有关系,期待微软的补丁。
今天下午一遇到一个问题,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>
protected void ImageButton1_Command(object sender, CommandEventArgs e) {
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也一直出怪事。刚才把下午不能运行的几个问题在家模拟了一下竟然运行良好!!明天又要头痛了
今天下午一遇到一个问题,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>
protected void ImageButton1_Command(object sender, CommandEventArgs e) {
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也一直出怪事。刚才把下午不能运行的几个问题在家模拟了一下竟然运行良好!!明天又要头痛了
相关文章推荐
- asp.net的一个bug的发现和解决
- 【发现】ASP.NET DEVELOPMENT SERVER 未能开始侦听端口xxxxx以一种访问权限不允许的方式做了一个访问套接字的尝试——解决方法
- 发现 ASP.Net 的一个关于"回车提交"的 Bug ? 必须多于一个 Text 域"回车提交",Server: ButtonX_Click 才能截获!
- [ASP.NET 2.0]PageParser.GetCompiledPageInstance中的一个Bug及解决方法
- VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug
- 发现 ASP.Net 的一个关于"回车提交"的 Bug ? 必须多于一个 Text 域"回车提交",Server: ButtonX_Click 才能截获!
- 在调试ASP.NET时,有时老发现页面一个按钮的单击事件重复执行的解决办法
- 似乎是发现了asp.net ajaxToolkit中TAB控件的一个BUG
- 在ASP.NET中,发现的关于string转换的一个小Bug
- 看了二十四画生的文章才发现ASP.NET Portal Starter Kit中调整顺序的一个Bug
- ASP.NET AJAX DropShadow 控件的一个BUG和解决方法(a bug of DropShadow and solution to resolve)
- 解决asp.net中radio button的排他性在DataList控件中失效的BUG
- 使用微软ASP.NET MVC Framework的一些感受 + 收集园子朋友发现的bug反馈
- [学习笔记][ASP.NET]发现CuteEditor的一个小问题
- 发现ASP.NET一个小技巧
- ASP.NET ImageButton/Image 控件关于border的一个诡异的BUG及其解决方案
- asp.net的一个重要发现(Page_Load()的执行次序先控件的事件函数)。
- 创建ASP.NET程序时候发生错误"HTTP/1.0500ServerError"的一个解决办法
- 发现NETSCALER 9800的一个BUG,目前正在解决。