ASP.NET Web 窗体中的 jQuery 验证插件

Posted

技术标签:

【中文标题】ASP.NET Web 窗体中的 jQuery 验证插件【英文标题】:jQuery Validation plugin in ASP.NET Web Forms 【发布时间】:2010-10-11 19:31:09 【问题描述】:

我真的很想在我的 ASP.NET Web 窗体应用程序(不是 MVC)中使用 jQuery Validation 插件。我发现它比到处添加 asp 验证器并设置控件来验证所有这些验证器更容易。

我只是在设置像这样的 class="required email" 这样的类时遇到了一些问题,我认为这与在主表单标签中有一个表单标签有关。

我在调用 jquery validate 时也遇到了问题,使用在 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" />

并破坏名称。我可以使用 &lt;%=tbUsername.ClientID %&gt; 获取 ClientID,但这不适用于 ClientName

有没有人使用 jquery 验证器插件和 asp.net 取得任何成功? 如果是这样,那么使用多个表单就像使用单独的验证组一样呢?

【问题讨论】:

【参考方案1】:

您可以查看rules add 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 引擎生成的蹩脚的标识符了。

【讨论】:

【参考方案2】:

这里是 using the jQuery Validation plugin with WebForms 和 emulating the concept of validation groups 的例子。一旦你解决了几个问题,它实际上工作得很好。

【讨论】:

您提供的链接包含重要信息。例如,当您每页有多个表单时,需要防止在每次提交表单时调用 jQuery 验证。 在网络表单中,每页只有 1 个表单。【参考方案3】:
$("#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>

【讨论】:

UniqueID 解决了我的问题,谢谢!我将 ASP.NET 4 与 Webforms 一起使用。 你也可以使用clientidmode。在页面指令或每个控件ClientIDMode="Static" 中将其设置为静态并引用$('#tbUsername') 谢谢伙计。你刚刚帮助我理解了 8 小时的工作......感谢!【参考方案4】:

您可以在此处查看 xVal.webForms:http://xvalwebforms.codeplex.com/

【讨论】:

这是一个很棒的插件,用于将 jQuery 验证与 ASP.NET 集成。通过支持验证组、验证摘要和关闭客户端验证的能力(如果需要),让生活变得如此轻松。【参考方案5】:

测试了 Darin Dimitrov 所说的,效果很好,但是如果您不想为每个字段设置特定的类,您可以使用 jQuery 选择器:

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

【讨论】:

【参考方案6】:

最好的解决方案是在 jQuery 规则中使用“”而不是 tbUsername。

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

【讨论】:

【参考方案7】:

我最近为 xVal.WebForms 发布了一个补丁文件,该文件解决了在众所周知的 ASP.Net 验证组上中继的多表单问题。此补丁还支持 ASP.Net CausesValidation 属性。

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

【讨论】:

【参考方案8】:

一个很好的方法是使用:

每当您需要引用服务器项时。

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"
                , 
        .

.......

【讨论】:

【参考方案9】:

对于 SharePoint 2010,我发现通过将不同的用户控件加载为视图(通过 ajax),如果您将 javascript 移动到库中并且不能将服务器标签用于控件 ID,则此方法有效:

例如#&lt;%= tPhone.ClientID %&gt;

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

此外,如果您通过 Ajax 动态加载用户控件,则不能使用 $(document).ready 如果 jQuery 在(服务器端事件)页面的用户控件上加载它正常,但在场景中它通过 Ajax 和更新面板加载它不会跳舞,你将不得不将 jQuery 封装在一个函数库中。

我还没有尝试通过 jQuery 加载用户控件,这看起来很重,并且似乎加载了整个页面,尽管可能稍微快一点或不加载。

比较加载技术的测试表明,更新面板的速度与其他技术一样快,并且页面大小相同或更小,并且基本上加载更快或更快或更快的数据。

【讨论】:

【参考方案10】:

我推荐使用 jQuery.simple.validator,它简单、轻量和可定制的验证器与 asp.net 网络表单兼容,因为它基本上可以在任何容器中执行验证,而不仅仅是

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

我建议您检查插件和文档。 用法:

<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

【讨论】:

他的问题是关于使用 validate 和 webforms。【参考方案11】:

in this article 的信息让我在使用 jQuery 查找匹配项时使用 Control.ClientID...非常有用的信息...

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

【讨论】:

以上是关于ASP.NET Web 窗体中的 jQuery 验证插件的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Web 窗体 - 通过 jquery 填充字段时客户端验证不起作用?

如何使用 JavaScript/jQuery 从 ASP.NET Web 窗体的 GridView 内部同时上传多个文件?

ASP.NET Web 窗体中的输出编码安全问题

在 ASP.NET Web 窗体中的特定 URL 上启用 CORS

使用长时间运行的方法阻止 ASP.NET Web 窗体中的网页

如何针对跨站点脚本清理查询字符串输入 - 反映 ASP .Net(Web 窗体)应用程序中的问题?