asp.net的一個bug的發現和解決

來源:互聯網
上載者:User
   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也一直出怪事。剛才把下午不能啟動並執行幾個問題在家類比了一下竟然運行良好!!明天又要頭痛了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.