2009-03-06 28 views
41

Tôi thực sự thích sử dụng jQuery Validation plugin trong ứng dụng ASP.NET Web Forms (không phải MVC). Tôi tìm thấy nó dễ dàng hơn so với việc thêm trình xác thực asp ở khắp mọi nơi và đặt điều khiển để xác thực trường trên tất cả chúng.jQuery Validation plugin trong ASP.NET Web Forms

Tôi chỉ gặp một số vấn đề khi đặt lớp như lớp này = "email yêu cầu" mà tôi nghĩ có liên quan đến việc có thẻ biểu mẫu trong thẻ biểu mẫu chính.

Tôi cũng chạy vào các vấn đề khi gọi validate jquery bằng cách sử dụng tên đó trở thành nham nhở trong một điều khiển asp

// validate signup form on keyup and submit 
$("#signupForm").validate({ 
    rules: { 
     username: { 
      required: true, 
      minlength: 2 
     }, }, 
    messages: { 
     username: { 
      required: "Please enter a username", 
      minlength: "username at least 2 characters" 
     }, 
    }. 

....... 

     <p> 
      <label for="username"> 
       Username</label> 
      <input id="username" name="username" /> 
     </p> 

vì đây

<asp:TextBox ID="tbUsername" runat="server"></asp:TextBox> 

ám như

<input name="ctl00$ContentPlaceHolder1$tbUsername" type="text" id="ctl00_ContentPlaceHolder1_tbUsername" /> 

và mangles tên. Tôi có thể lấy ClientID bằng cách sử dụng <%=tbUsername.ClientID %> nhưng điều đó không hoạt động với ClientName

Có ai có bất kỳ thành công nào bằng cách sử dụng plugin trình xác thực jquery với asp.net không? Nếu vậy điều gì về việc sử dụng nhiều biểu mẫu giống như sử dụng các nhóm xác thực riêng biệt?

Trả lời

46

Bạn có thể kiểm tra các rules add function, nhưng về cơ bản đây là những gì bạn có thể làm:

jQuery(function() { 
    // You can specify some validation options here but not rules and messages 
    jQuery('form').validate(); 
    // Add a custom class to your name mangled input and add rules like this 
    jQuery('.username').rules('add', { 
     required: true, 
     messages: { 
      required: 'Some custom message for the username required field' 
     } 
    }); 
}); 

<input name="ctl00$ContentPlaceHolder1$tbUsername" type="text" id="ctl00_ContentPlaceHolder1_tbUsername" class="username" /> 

Bằng cách này không cần phải lo lắng về các định danh crappy tạo ra bởi động cơ webforms.

4

Bạn có thể kiểm tra xVal.webForms đây: http://xvalwebforms.codeplex.com/

+0

Đây là một plugin tuyệt vời cho việc tích hợp jQuery xác nhận với ASP.NET. Làm cho cuộc sống trở nên dễ dàng như vậy với sự hỗ trợ của các nhóm xác nhận, tóm tắt xác nhận và khả năng tắt xác thực phía máy khách (nếu được yêu cầu). – Gopinath

0

Gần đây tôi đã đăng tải một tập tin vá lỗi cho xVal.WebForms mà giải quyết vấn đề nhiều hình thức chuyển tiếp trên nổi tiếng ASP.Net xác Group. Bản vá này cũng hỗ trợ tài sản ASP.Net CausesValidation.

Yo có thể đọc về nó ở đây: http://cmendible.blogspot.com/

11

Dưới đây là ví dụ về using the jQuery Validation plugin with WebFormsemulating the concept of validation groups với nó. Nó thực sự hoạt động khá tốt một khi bạn mịn ra một vài vấn đề.

+1

Liên kết bạn cung cấp chứa thông tin quan trọng. Ví dụ, việc ngăn chặn việc xác nhận hợp lệ jQuery được gọi trên mỗi lần gửi biểu mẫu là cần thiết khi bạn có nhiều hơn một biểu mẫu trên mỗi trang. – Alkaline

+0

Trong biểu mẫu web, chỉ có 1 biểu mẫu trên mỗi trang. – LarryBud

2

Tested gì Darin Dimitrov nói và nó hoạt động hoàn hảo, nhưng nếu bạn không muốn thiết lập một lớp học cụ thể cho từng lĩnh vực của bạn, bạn có thể sử dụng jQuery selectors:

$('form').validate(); 
$('input[id$=Username]').rules('add', { 
    required: true, 
    messages: { 
     required: 'Some custom message for the username required field' 
    } 
}); 

<input name="ctl00$ContentPlaceHolder1$tbUsername" type="text" id="ctl00_ContentPlaceHolder1_tbUsername" /> 
0

Một cách tuyệt vời để làm này là sử dụng:

<% = textbox.Name%> hoặc <% = textbox.ClientId%> bất cứ khi nào bạn cần phải tham khảo một mục máy chủ.

ví dụ:

var phoneNumb = $('#<%= tPhone.ClientID %>').val(); 

hoặc

$("#signupForm").validate({ 
     rules: { 
       <%= username.Name %>: { 
         required: true, 
         minlength: 2 
       }, }, 
     messages: { 
       <%= username.Name %>: { 
         required: "Please enter a username", 
         minlength: "username at least 2 characters" 
       }, 
     }. 

.......

11
$("#signupForm").validate({ 
     rules: { 
       <%= tbUsername.UniqueID %>: { 
         required: true, 
         minlength: 2 
       }, }, 
     messages: { 
       <%= tbUsername.UniqueID %>: { 
         required: "Please enter a username", 
         minlength: "username at least 2 characters" 
       }, 
     }); 

<asp:TextBox ID="tbUsername" runat="server"></asp:TextBox> 
+1

UniqueID đã giải quyết được sự cố của tôi, cảm ơn! Tôi đang sử dụng ASP.NET 4 với Webforms. – BrunoSalvino

+2

Bạn cũng có thể sử dụng clientidmode sau đó. đặt nó thành tĩnh trong chỉ thị trang hoặc cho mỗi điều khiển 'ClientIDMode =" Static "' và tham chiếu đến đó như '$ ('# tbUsername')' –

+0

Cảm ơn người đàn ông. Bạn chỉ giúp tôi có ý nghĩa làm việc 8 giờ ... Đánh giá cao! – DextrousDave

0

Đối SharePoint 2010 Tôi tìm thấy với tải usercontrols khác nhau như quan điểm (thông qua ajax) rằng đây làm việc nếu bạn di chuyển javascript vào một thư viện và không thể sử dụng các thẻ máy chủ cho các điều khiển của id như thế này:

ví dụ #<%= tPhone.ClientID %>

$('input[id$=tPhone]').rules('add', 
{  
required: true,  
messages: 
{   
    required: 'Some custom message for the username required field'  
} 
}); 

tiếp tục đến điều này nếu bạn tự động tải một điều khiển người dùng thông qua Ajax thì bạn không thể sử dụng $ (document) .ready bạn sẽ phải đóng gói các jQuery trong một thư viện chức năng nếu nó trên trang User Control tại (server side event) tải tiền phạt của nó nhưng trong kịch bản của nó được tải thông qua Ajax với Update Panel, nó sẽ không nhảy.

Tôi chưa thử tải usercontrols qua jQuery, điều này có vẻ nặng và dường như tải toàn bộ trang mặc dù có lẽ hơi nhanh hơn hay không.

Thử nghiệm so sánh kỹ thuật tải cho thấy Bảng điều khiển nhanh và dẫn đến kích thước trang giống hoặc nhỏ hơn các kỹ thuật khác và cơ bản được tải nhanh hơn hoặc nhiều dữ liệu nhanh hơn hoặc nhanh hơn.

2

Giải pháp tốt nhất là sử dụng "<% = tbUsername.UniqueID%>" thay vì tbUsername trong các quy tắc jQuery.

$("#signupForm").validate({ 
rules: { 
    "<%=tbUsername.UniqueID %>": { 
     required: true, 
     minlength: 2 
    }, }, 
messages: { 
    "<%=tbUsername.UniqueID %>": { 
     required: "Please enter a username", 
     minlength: "username at least 2 characters" 
    }, 
}. 
0

tôi khuyên bạn nên sử dụng jQuery.simple.validator, validator dễ dàng, lightweigh và tùy chỉnh nó tương thích với các hình thức web asp.net, bởi vì về cơ bản nó có thể thực hiện kiểm chứng thực trong bất kỳ container, không chỉ

https://github.com/v2msoft/jquery.simple.validator

Tôi khuyên bạn nên kiểm tra plugin và tài liệu. Cách sử dụng:

<script type="text/javascript" src="/Content/js/jquery-plugins/jquery.simple.validator.js"></script> 

<div id="container"> 
    <!-- REQUIRED FIELD --> 
    <label>Required Field: </label><br/> 
    <input type="text" id="required_field_control" data-required data-required-msg="Field is required" /><br /><br/> 

    <input type="button" value="Validate" onclick='javascript:validate();' /> 
</div> 


<script type="text/javascript"> 
    function validate() { 
     $("#container").initialize(); 
     var ok = $("#container").validate(); 
     if (!ok) alert("There are errors"); 
     else alert("Form is ok"); 
    } 
</script 
+0

Câu hỏi của ông về việc sử dụng xác thực với biểu mẫu web. – LarryBud

0

Thông tin in this article dẫn tôi sử dụng Control.ClientID khi tìm kiếm một trận đấu với jQuery ... thông tin Rất hữu ích ...

<label for="<%= tbName.ClientID %>">Name</label> 
<input id="cphBody_tbName" runat="server" .../> 
Các vấn đề liên quan