2009-12-15 36 views
5

Trong trang asp.net aspx, có một nút để lưu dữ liệu, khi người dùng nhấp vào nút này, tôi muốn: 1. Vô hiệu hóa nút này ngay lập tức 2. Sau đó, gọi mã phía sau hàm Save() để lưu dữ liệu trở lại DB 3. Sau đó kích hoạt lại nút này.Làm cách nào để chạy mã phía máy khách và máy chủ cho cùng một nút?

Những gì tôi đã làm như sau:

  1. JS chức năng trong apsx:

    chức năng DisableSave() { saveButton = document.getElementById ('<% = btnSave.ClientID%>'); saveButton.disabled = true; trả về false; }

  2. Nút kịch bản:

    < --- asp: Button ID = "btnSave" theo yêu cầu = "Button_Command" CommandName = "Save" runat = "server" Text = "Save" OnClientClick =" javascript: DisableSave(); "/>

  3. Trong chức năng mã phía sau Save() (được gọi bằng CommandName), hãy đặt nút Lưu bật lại.

Nhưng khi tôi chạy mã, chỉ vô hiệu hóa nút lưu, Cuộc gọi mã phía sau đã không xảy ra.

Cách khắc phục?

+0

bạn có đang sử dụng IE không? –

+0

Thậm chí tôi loại bỏ trả về false; vẫn nhận được kết quả tương tự, không có mã đằng sau cuộc gọi. IE/FF cùng một kết quả. – KentZhou

+0

Xin chào các bạn, nút của tôi nằm trong UpdatePanel để cập nhật một phần. Một cái gì đó trông giống như không mong đợi. – KentZhou

Trả lời

3

Dường như một số trình duyệt (IE) sẽ không xử lý tác vụ gửi của nút nếu nó bị tắt. Tôi đã thử điều này trong Firefox và nó đã postback, nhưng không có may mắn với IE. Một giải pháp thay thế, mặc dù không cung cấp phản hồi của người dùng, sẽ là thực hiện OnClientClick="this.onclick= function() { return false; }". Điều đó sẽ ít nhất ngăn cản nhiều postbacks hơn xảy ra.

EDIT: onclick cần thiết để trở thành một hàm không phải là chuỗi.

+0

điều này hoàn toàn sẽ ngừng đăng lại. Không thể gọi mã đằng sau hàm. – KentZhou

+0

Điều này sẽ không ngăn việc đăng lại xảy ra lần đầu tiên. Nó sẽ ngăn chặn trình duyệt đăng lại bất kỳ lần nào nữa mặc dù nếu người dùng bắt đầu nhấp vào như điên. –

2

Sự cố là việc vô hiệu hóa nút bằng JavaScript trong sự kiện onclick sẽ dừng quá trình đăng lại xảy ra.

Cách giải quyết đơn giản được minh họa trong bài viết this CodeProject.

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