หากคุณใช้รูปภาพเป็นประเภทปุ่มใน gridview เหตุการณ์คำสั่งแถวจะถูกดำเนินการสองครั้งเมื่อมีการทริกเกอร์ ว่ากันว่าจะปรากฏเฉพาะใน IE6, IE5, firefox ฯลฯ ก็ไม่มีปัญหาเช่นกัน ปัญหา ดูเหมือนว่าจะเกี่ยวข้องกับเวอร์ชัน IIS ฉันหวังว่าจะได้รับแพทช์ของ Microsoft
ฉันพบปัญหาในบ่ายวันนี้ เหตุการณ์ rowcommand ของ gridview ถูกดำเนินการสองครั้ง และ postback ก็ถูกดำเนินการสองครั้งเช่นกัน ในตอนแรก ฉันสงสัยว่ามันจะเป็นปัญหากับตัวดีบักเกอร์ หลังจากตรวจสอบบันทึกแล้ว ฉันยืนยันว่าเป็นเช่นนั้นจริง ๆ ดำเนินการสองครั้ง
ฉันตรวจสอบโค้ดแล้ว n ครั้งและตัดมันออกทีละประโยค แต่ก็ยังไม่พบปัญหา ฉันเริ่มสงสัยว่าเป็นเมาส์ และพบว่ามีการส่งคำขอสองรายการจริง ๆ และคำขอแรกไม่ได้รับการประมวลผล . ในบางครั้ง ฉันเปลี่ยนประเภทของปุ่มจากรูปภาพเป็นปุ่ม และมันทำงานโดยไม่คาดคิดเพียงครั้งเดียว ดูเหมือนว่าปัญหาจะอยู่ที่ Imagebutton เท่านั้น
จากการค้นหาของ Google ฉันพบว่ามีหลายคนประสบปัญหานี้ และแน่นอนว่าเป็นข้อผิดพลาดของ asp.net การคลิกปุ่มจะส่งคำขอสองครั้งไปที่ iis ครั้งแรกน้อยกว่าครั้งที่สองแปดไบต์ ทำให้คำขอแรกไม่สำเร็จ จากนั้นจะถูกส่งอีกครั้ง ดังนั้น สิ่งที่ง่ายที่สุดในการคิดคือละเว้น ขอครั้งแรกดังนี้ นี่คือทางออกแรก
ขณะนี้มีวิธีแก้ไขสองวิธี ซึ่งทั้งสองวิธีไม่สมบูรณ์แบบ วิธีแรกคือการเพิ่มคำสั่งต่อไปนี้ในเหตุการณ์คำสั่งแถว:
ถ้า (คำขอ ["x"] == null && คำขอ ["y"] == null)
การตอบสนองสิ้นสุด();
พิกัดของรูปภาพจะถูกกำหนดผ่านคำสั่งนี้ หากพิกัดเป็นโมฆะ แสดงว่าคำขอแรกไม่ถูกต้อง ให้สิ้นสุด
Microsoft แนะนำอันที่สอง: พยายามอย่าใช้ imagebutton ใน gridview แต่ใช้ลิงก์หรือปุ่ม หากคุณต้องใช้มัน คุณสามารถใช้โค้ดที่คล้ายกันได้:
<asp:GridView ID="GridView1" runat="เซิร์ฟเวอร์">
<คอลัมน์>
<asp:TemplateField>
<เทมเพลตรายการ>
<asp:ImageButton runat=server id = "ImageButton1" CommandName = "ลบ"
ImageUrl="" commandargument='<%# DataBinder.Eval(คอนเทนเนอร์,
"RowIndex") %>' OnCommand="ImageButton1_Command" />
</เทมเพลตรายการ>
</asp:TemplateField>
</คอลัมน์>
</asp:GridView>
โมฆะที่ได้รับการป้องกัน ImageButton1_Command (ผู้ส่งวัตถุ 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 ผลการพูดคุยในหน้าแรกคือ ปัญหานี้จะเกิดขึ้นเฉพาะเมื่อชนิดของปุ่มเป็นรูปภาพเท่านั้นซึ่งสามารถ ข้ามไป อย่าอ่าน มีการอภิปรายโดยละเอียดและวิธีแก้ปัญหาในสองหน้าถัดไป
วันนี้ฉันเจอปัญหาแปลกๆ ทั้งวัน และหัวของฉันก็หมุนไปหมด โค้ดเดียวกันนี้มักจะถูกเรียกใช้ได้ระยะหนึ่ง แต่ก็ไม่ได้สักพักหนึ่ง และสิ่งแปลกๆ ก็ยังคงเกิดขึ้นในปี 2005 ฉันเพิ่งจำลองปัญหาหลายอย่างที่ไม่สามารถเรียกใช้ในช่วงบ่ายที่บ้านได้ และมันก็ใช้ได้ดี! - พรุ่งนี้ฉันจะปวดหัวอีกครั้ง
http://www.cnblogs.com/bluewater/archive/2006/11/21/567871.html