ASP.NET Web窗体中的jQueryvalidation插件

我真的很喜欢在我的ASP.NET Web窗体应用程序(而不是MVC)中使用jQueryvalidation插件。 我发现比在每个地方添加aspvalidation器都更容易,并将控件设置为validation所有这些字段。

我只是有一些问题,当设置类像这个类=“必需的电子邮件”,我认为有一个窗体标签内的主要forms标签。

我也遇到问题时,调用jQueryvalidation使用的名称,成为一个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> 

因为这

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

呈现为

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

并摧毁了这个名字。 我可以使用<%=tbUsername.ClientID %>来获得ClientID,但不能用于ClientName

有没有人有任何使用jQueryvalidation程序插件与asp.net成功? 如果是这样,使用多个表单就像使用单独的validation组一样?

你可以检查规则添加function ,但基本上这是你可以做的:

 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" /> 

这样就不用担心webforms引擎生成的蹩脚的标识符。

下面是将jQueryvalidation插件与WebForms一起使用并使用它validationvalidation组的概念的示例。 一旦你解决了一些问题,它实际上工作得很好。

 $("#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> 

你可以在这里检查xVal.webForms: http ://xvalwebforms.codeplex.com/

testingDarin Dimitrov说过的,它完美的工作,但是如果你不想为每个字段设置一个特定的类,你可以使用jQueryselect器:

 $('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" /> 

最好的解决scheme是在jQuery规则中使用“<%= tbUsername.UniqueID%>”而不是tbUsername。

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

我最近发布了一个xVal.WebForms的补丁文件,它解决了众所周知的ASP.Netvalidation组中的多个表单问题。 这个补丁还支持ASP.Net CausesValidation属性。

哟可以在这里阅读: http : //cmendible.blogspot.com/

一个很好的方法是使用:

<%= textbox.Name%><%= textbox.ClientId%>,只要您需要引用服务器项目。

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

要么

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

…….

对于SharePoint 2010,我发现加载不同的用户控件作为视图(通过ajax),如果您将JavaScript移动到库中,并且不能使用服务器标签作为控件ID,如下所示:

例如#<%= tPhone.ClientID %>

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

除此之外,如果你通过Ajaxdynamic加载用户控件,那么你不能使用$(document).ready如果在(服务器端事件)页面上的用户控件加载它的罚款,你将不得不将封装在一个函数库中的jQuery在通过Ajax加载更新面板的情况下,它不会跳舞。

我还没有尝试通过jQuery加载usercontrols,但这看起来很沉重,似乎加载整个页面,虽然可能稍快或不。

比较加载技术的testing显示,更新面板速度很快,导致与其他技术相同或更小的页面大小,并且基本上以更快或更快的速度加载更快或更多的数据。

我build议使用jQuery.simple.validator,它的简单,轻量级和可定制的validation器与asp.net web表单兼容,因为基本上它可以在任何容器中执行validation,不仅

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

我build议你检查插件和文档。 用法:

 <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 

这篇文章中的信息导致我在使用jQuery查找匹配时使用Control.ClientID …非常有用的信息…

 <label for="<%= tbName.ClientID %>">Name</label> <input id="cphBody_tbName" runat="server" .../>