Lỗi Key Enter event của ASP.NET trên IE Browser với form có một textbox

Vừa deploy xong cái Social Graph dùng Javascript, đang rỗi việc lại nhớ đến blog lâu không viết gì, chợt nảy ra ý tưởng sẽ viết các entry về các vấn đề mà tôi đã gặp phải khi làm ở Vườn chim 2.0 và cách giải quyết, sau một thời gian sẽ có một danh sách dài các lỗi giời ơi đất hỡi, vừa giúp mình ghi nhớ, lại giúp cho những ai gặp phải những lỗi này có thể tham khảo cách giải quyết, cũng hay

Hôm nay sẽ bắt đầu với cái lỗi gặp phải khi tạo một form sử dụng ASP.NET, không fire ra event Key Enter trên Internet Explorer (cả IE6 và IE7, .NET Framework 1.0 hay 2.0 đều dính, chưa test trên 3.5)

Từ trước đến giờ thì việc submit một form trong ASP.NET là cực kỳ đơn giản rồi, nhập data xong Enter một phát là xong (ông nào thích chuột thì click lên button submit), mọi việc vẫn diễn ra nhưng kiểu đương nhiên nó phải thế, cho đến một hôm tôi phải tạo một cái form chỉ có 1 textbox và 1 button (làm cái form search ý mà), nhấn Enter xong, form vẫn submit nhưng event btnSubmit click thì chẳng thấy đâu (trêm IE thôi nhé, Firefox hay Opera hay là Chrome vẫn ngon). Search trên mạng thì cũng thấy nhiều chú dính, từ năm 2003 cũng có, cho đến 2008 vẫn có chú hỏi.

Nguyên nhân: thằng IE dở hơi khi form được submit đi có hơn 1 textbox thì HTTP_POST của nó thế này (or something like that)

TextBox1=Value1&TextBox2=Value2&...&TextBoxN=ValueN&btnSubmit=Click Me!

Nhưng nếu chỉ có 1 textbox thì nó lại không submit đi btnSubmit=ClickMe!, chỉ còn thế này

TextBox1=Value1

Thế nên nó không fire ra cái event btnSubmit click

Giải quyết:

Đơn giản chỉ là lừa nó, thêm vào một textbox và hidden nó đi, kiểu như này:

<asp:TextBox runat=”server” style=”visibility:hidden;display:none;” />

Một lỗi hết sức vớ vẩn nhưng cứ post lên, hi vọng giúp được ai đó

Nguồn tham khảo: http://www.aspdotnetfaq.com/Faq/Why-Button-Click-event-handler-code-is-not-executed-when-Enter-key-is-pressed-on-ASP-NET-Form.aspx

Còn khá nhiều lỗi vớ vẩn khác đã gặp phải, hi vọng sẽ có thời gian để post tiếp :) )

Follow

Get every new post delivered to your Inbox.