2009-01-20 39 views
12

Làm cách nào để kết hợp tốt nhất JQuery với mô hình xác thực phía máy khách ASP.NET?Cách thanh lịch để kết hợp xác thực ASP.NET với JQuery

Tôi thường tránh triển khai mô hình xác thực ASP.NET vì nó luôn có vẻ quá mức cần thiết cho những gì tôi đang làm. Đối với các trang web tôi đang làm việc trên bây giờ tôi chỉ thu thập dữ liệu người dùng không quan trọng và chỉ cần xác nhận một phần cơ bản. Tôi không muốn tin nhắn xuất hiện trong DOM hay bất cứ thứ gì như thế. Tôi luôn thấy khó để có được điều đó.

Nhưng bây giờ tôi cần phải thực hiện điều gì đó thanh lịch hơn một chút. Những gì tôi muốn tận dụng trong JQuery là các biểu thức tìm kiếm thông minh như 'cho tôi biết nếu ít nhất một trong các hộp kiểm này được chọn'. Tôi mới vào JQuery, nhưng tôi nghĩ rằng đây là khoảng 1 dòng của JQuery và phức tạp hơn nhiều trong mô hình ASP.NET truyền thống.

Vì vậy, tôi muốn tận dụng tối đa khả năng của JQuery nhưng không hoàn toàn loại bỏ mô hình xác thực của ASP.NET.

cách tiếp cận tốt nhất của tôi cho đến nay là thế này (trong đó khá nhiều đi phía sau lưng của ASP.NET):

$('#<%=btnJoinMailingList.ClientID %>').bind('click', function(event) { 

    if (...) { 
     alert("You must enter a name"); 
     return false; 
    }  
    return true; 
}); 

một cách tiếp cận tốt hơn ở đây là gì? Có bất kỳ plugin được đề xuất nào cho JQuery không?

PS. Tôi không muốn sử dụng mô hình MVC. Tôi đang cố gắng tạo một trang web 'RAD' và không có thời gian để nghiên cứu kỹ những nội dung mới thú vị đó.

Trả lời

5

Biểu mẫu web ASP.NET và mô hình xác thực của jQuery rất, rất giống nhau, IMHO, trong đó cả hai đều là phía máy khách và thực hiện một trong số chúng không nhất thiết làm suy yếu khác. Sự khác biệt thực sự duy nhất là, đằng sau hậu trường, trình xác thực ASP.NET sẽ gây ra phương thức Page.Validate() để trả về false nếu bạn có trường không được xác nhận.

Bạn có thể chọn cuộn tay các điều khiển xác thực của riêng mình, và sau đó gây ra hành vi tương tự, nhưng như bạn đã tuyên bố, điều đó có thể là quá mức cần thiết.

jQuery cũng có plugin Trình xác thực của riêng mình mà bạn có thể muốn xem: http://docs.jquery.com/Plugins/Validation/Validator.

12

ASP.NET có nhiều kiểm soát xác thực, một trong số đó là CustomValidator.
Bạn có thể cung cấp cho nó chức năng JavaScript tùy chỉnh sử dụng jQuery và trả lại true hoặc false qua đối số. Bạn có thể sử dụng điều khiển này để tự động hiển thị thông báo lỗi hoặc chỉ chạy mã jQuery và xử lý màn hình theo cách thủ công.

ASPX:

<asp:CustomValidator ID="CustomValidator1" runat="server" Display="None" 
        ClientValidationFunction="checkTextareaLengths"> 
</asp:CustomValidator> 

JavaScript:

function checkTextareaLengths(source, args){ 
    args.IsValid = true; 
    $('textarea').each(function(){ 
    if($(this).text().lenght > 400) 
     args.IsValid = false; 
    }); 
} 
+0

Lưu ý: Tôi không nghĩ rằng chỉ trở về đúng hay sai là đi làm việc - bạn cần phải chấp nhận 2 params đến chức năng (người gửi, args) và thiết lập args.IsValid = ok; ở cuối để chơi độc đáo với khung xác thực biểu mẫu web. – chris

+0

@chris - Rất đúng - Tôi biết rõ hơn. Bạn biết không, tôi sẽ cập nhật câu trả lời! – Kobi

+0

@chris - Xong! Trong phòng thủ của tôi, tôi mơ hồ nhớ lại sự thật hay sai đã làm việc cho tôi, nhưng đây là phương pháp chính thức và chắc chắn là tốt hơn (tôi chắc chắn hy vọng tôi không đề nghị bất cứ điều gì ngu ngốc - câu hỏi này có 5700 lượt xem!). Cảm ơn. – Kobi

5

ASP.NET validator là một khoảng thời với các thuộc tính bổ sung. Với jquery bạn có thể acces tất cả validators trên trang hoặc lọc chúng theo bất kỳ tiêu chí được hỗ trợ bởi jquery. Để bắt buộc xác nhận qua javascript, hãy gọi hàm ValidatorValidate. Ví dụ:

function validate_step(step_element) { 
     // find all validators on step_element and force validation 
     var validators = $(step_element).find("span[controltovalidate]"); 
     var stepIsValid = true; 
     validators.each(function() { 
      ValidatorValidate(this); stepIsValid &= this.isvalid; 
     }); 
     return stepIsValid; 
    } 
+0

Cảm ơn bạn ... đã làm việc rất tốt –

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