2009-10-13 33 views
9

Tôi có một nút html, xem dưới đây. Khi được nhấp và AutoEventWireup = "true", trình xử lý nhấp Save_Click được kích hoạt hai lần. Khi AutoEventWireup = "False", nó sẽ kích hoạt một lần.HtmlButton handler bắn hai lần khi nhấp (khi AutoEventWireup = "True")

Tại sao nó bắn hai lần? Nút không được đăng ký hai lần và không có mã nào đang thêm trình xử lý sự kiện. Sử dụng trang chính và không có Ajax.

<button id="Save" accesskey="v" type="submit" runat="server" onserverclick="Save_Click"></button> 
+0

thì phải có cái gì khác trong các mã làm cho nó bắn, tôi nghĩ rằng chúng tôi cần phải nhìn thấy tất cả các mã liên quan cho trang. Nó rất không chắc rằng nút đang làm nó trên của riêng nó. – kscott

Trả lời

10

Ok tôi phát hiện ra rằng một vụ cháy HtmlButton cho sự kiện onserverclick và cho type = "submit". Khi tôi loại bỏ loại = "gửi", nó cháy một lần. Hành vi kỳ quặc này khiến tôi mất nhiều thời gian để khám phá!

+4

Trong trường hợp của tôi, tôi đã không nói với nó sử dụng type = "submit", tôi đã không chỉ định một loại. Tôi đã chỉ định rõ ràng type = "button" và nó đã được sửa sau đó. – Peter

+2

Điều này có hành vi thú vị khác nhau dựa trên phiên bản ASP.NET bạn đang chạy hoặc trình duyệt bạn đang sử dụng. Ví dụ, tôi đã không chỉ định 'type' và nó hoạt động tốt trên Fireofox, nhưng Chrome cho rằng đó là' submit' thay vì 'button' –

0

Chỉ cần một đoán: xử lý không được sa thải hai lần, nhưng bạn đã thiết lập một hành vi tương tự trong sự kiện Page_Load mà làm cho nó xuất hiện để được bắn hai lần.

+0

Điểm ngắt bên trong trình xử lý được nhấn hai lần trước khi trang trả về. Người xử lý chèn một bản ghi trong một bảng và tôi thấy hai bản ghi. Không có chỗ nào khác trong mã có chèn và không có trình kích hoạt cơ sở dữ liệu. –

+0

Tôi sẽ kscott thứ hai ... chúng ta có thể xem thêm mã sau không? –

19

Và bây giờ (ít nhất là trong .net 4) thậm chí tốt hơn:

<button runat="server"> 

bởi cư xử mặc định vì nó có type = "submit" (cháy hai lần trên nhấp chuột), vì vậy cho nó hoạt động một cách chính xác, chúng tôi một cách rõ ràng nên đặt type = "button", ví dụ:

<button id="ButtonSubscribe2" runat="server" type="button" onserverclick="Save_Click"></button> 
+0

Giải quyết vấn đề của tôi. Cảm ơn! – jmotes

+0

nó đã giải quyết được vấn đề của tôi! :) cảm ơn! –

+0

điểm tốt đẹp, cảm ơn –

Các vấn đề liên quan