2010-08-27 4 views
7

Đơn giản ở đây ... có cách nào ngăn cản người dùng nhấp đúp vào một nút trong biểu mẫu web và gây ra các sự kiện trùng lặp để kích hoạt không?Ngăn chặn sao lưu trùng lặp trong ASP.Net (C#)

Nếu tôi có biểu mẫu nhận xét và người dùng nhập "đây là nhận xét của tôi" và nhấp gửi, nhận xét được hiển thị bên dưới ... tuy nhiên nếu họ nhấp đúp, nhấp ba lần hoặc chỉ cần bật bàn phím có thể khiến nhiều phiên bản được đăng.

Client-side tôi có thể khá dễ dàng vô hiệu hóa các nút onclick - nhưng tôi thích các giải pháp server-side để điều như thế này :)

Có một thời gian chờ postback mỗi ViewState có thể được thiết lập cho ví dụ?

Cảm ơn

Trả lời

2

Tôi không nghĩ rằng bạn nên tải máy chủ cho các tác vụ tầm thường như thế này. Bạn có thể thử một số giải pháp chặn giao diện người dùng jquery như this. Bộ công cụ Microsoft Ajax cũng nên có một số điều khiển mà làm như vậy. Tôi đã sử dụng nó một thời gian dài trước đây, dường như không thể nhớ tên kiểm soát mặc dù.

+0

Điểm công bằng, phía khách hàng! – isNaN1247

+0

liên kết dường như đã chết. –

1

Đặt biến phiên khi người dùng nhập trang như Phiên ["FormXYZSubmitted"] = false. Khi biểu mẫu được gửi, hãy kiểm tra biến số đó như

if((bool) Session["FormXYZSubmitted"] == false) { 
    // save to db 
    Session["FormXYZSubmitted"] = true; 
} 
+0

bạn có thể làm điều đó vào nút sự kiện click cũng chính xác –

+0

Tôi không bao gồm điều đó nhưng nó chính xác. – Zafer

0

Tôi đã có cùng một trường hợp. Giải pháp của một trong những đồng nghiệp của tôi là triển khai một loại Bộ hẹn giờ trong Javascript, để tránh xem xét nhấp chuột thứ hai dưới dạng nhấp chuột.

Hy vọng rằng sẽ giúp,

0

Tắt nút khi nhấp, sử dụng bộ công cụ jquery hoặc microsoft ajax.

0

Tùy thuộc vào tầm quan trọng của điều này là bạn, có thể tạo ra một mảng của một thời gian GUID của mà bạn loại bỏ từ mảng một khi cập nhật đã được xử lý (tức là đăng lại trong ViewState/lĩnh vực ẩn)

Nếu guid không nằm trong mảng trên postback, yêu cầu không hợp lệ.

Bảng cơ sở dữ liệu thay thế cho mảng trong môi trường nhóm.

0

Phía máy khách có thể khó khăn nếu bạn đang sử dụng xác thực Asp.Net.

Nếu bạn có một trang chủ, đặt này trong trang chủ:

void IterateThroughControls(Control parent) 
    { 
     foreach (Control SelectedButton in parent.Controls) 
     { 
      if (SelectedButton is Button) 
      { 
       ((Button)SelectedButton).Attributes.Add("onclick", " this.disabled = true; " + Page.ClientScript.GetPostBackEventReference(((Button)SelectedButton), null) + ";"); 
      } 

      if (SelectedButton.Controls.Count > 0) 
      { 
       IterateThroughControls(SelectedButton); 
      } 
     } 
    } 

Sau đó thêm video này vào Page_Load trang chủ:

IterateThroughControls(this);