需要一种更好的方法来使用 jquery 验证插件来验证 ASP.NET 复选框?

Posted

技术标签:

【中文标题】需要一种更好的方法来使用 jquery 验证插件来验证 ASP.NET 复选框?【英文标题】:Need a better way to validate ASP.NET checkboxes using a jquery validation plugin? 【发布时间】:2010-11-11 07:29:54 【问题描述】:

问题:

我想使用 jquery 验证插件验证一些 ASP.NET 复选框(位于:http://bassistance.de/jquery-plugins/jquery-plugin-validation/)

全部内容:

无法设置 ASP.NET 复选框的名称属性(或者是吗?)。当控件被渲染并且可以使用检索时,它会自动设置

<%= emailCheckBox.UniqueID %>

所以两个复选框如下:

<asp:CheckBox runat="server" ID="emailAcceptCheckBox" />Email<br />
<asp:CheckBox runat="server" ID="phoneAcceptCheckBox" />Phone<br />

将渲染到:

<INPUT id="ctl00_MainContentPlaceHolder_emailAcceptCheckBox" type="checkbox" name="ctl00$MainContentPlaceHolder$emailAcceptCheckBox">
<INPUT id="ctl00_MainContentPlaceHolder_phoneAcceptCheckBox" type="checkbox" name="ctl00$MainContentPlaceHolder$phoneAcceptCheckBox">

也许将 ASP.NET 与 jquery 验证插件混合使用会很麻烦,但我更喜欢 jquery 验证插件,它适用于输入和其他字段。

问题是,jquery 验证插件想要使用复选框的名称属性对复选框进行分组。这个名称属性应该等于所有的复选框和一个组。

我做了什么:

我使用 jquery 为所有复选框添加了一条规则:

$("#[id*='AcceptCheckBox']").each(function()  $(this).rules("add",  minchecked: 1 ); );

并添加了我自己的复选框规则检查:

jQuery.validator.addMethod("minchecked",
 function(value, element, param) 
     var noOfChecked = $("#[id*='AcceptCheckBox']:checked").length;
          return noOfChecked >= param;
     ,
 "Error");

(此规则适用于 ID 包含 AcceptCheckBox 的复选框,但在本例中可以)。

当我打电话时:

var result = $("#aspnetForm").validate().form();

如果我的验证成功或失败,它会完美返回!

但是:

1) 我不觉得这是一个非常干净和好的解决方案。有更好的建议吗?

2) 当我运行 validate().form() 时,它会检查我所有的复选框,并为每个复选框检查所有其他复选框。这真的没有必要。我怎样才能避免这种情况?

【问题讨论】:

【参考方案1】:

总的来说,您的代码在我看来确实不错。我认为你已经干净地处理了 asp:checkbox 限制(你不能为 asp:checkbox 指定'name'属性)。

就个人而言,我会使用常规的 html 复选框。

<input type="checkbox" runat="server" ID="emailAcceptCheckBox" name="acceptCheckBox" value="emailAccepted" /><label for="emailAcceptCheckBox">Email</label><br />
<input type="checkbox" runat="server" ID="phoneAcceptCheckBox" name="acceptCheckBox" value="phoneAccepted" /><label for="phoneAcceptCheckBox">Email</label><br />

(我添加了一个标签标签,以便用户可以单击标签(更大的目标)来选中/取消选中复选框。)

以上将简化您的 jQuery 代码。

在您的服务器端代码上,检查 Request.Form["acceptCheckBox"] 以查看哪些已检查,哪些未检查。

【讨论】:

嗨SolutionYogi 谢谢你的回答。你说得对。使用 html--tags 而不是 ASP.NET-controls 制作输入框会更好。但是在一个特定的问题(不是上面的例子)中,复选框是在服务器端构建的,并添加到客户端的 PlaceHolder 中。所以我想继续使用 ASP.NET 控件。我刚刚完成了一个解决方案,这也是一个不错的解决方案。我查看了验证 jquery-plugin 并添加了我自己的规则并在这里和那里做了一些小技巧,所以它现在也可以与 ASP.NET 复选框一起使用!

以上是关于需要一种更好的方法来使用 jquery 验证插件来验证 ASP.NET 复选框?的主要内容,如果未能解决你的问题,请参考以下文章

寻找一种更好的方法来使用 Laravel 处理大型 XML 文件以将部分导入 MySQL 数据库

jQuery 电子邮件验证要求

jquery插件开发

有没有更好的方法来使用没有 eval 的字符串来获取对动作脚本中影片剪辑的引用

jquery validate表单验证

jquery.easing.1.3.js这个插件有啥作用功能么?