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

时间:2009-07-16 09:44:49

标签: jquery asp.net validation checkbox

问题:

我想使用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验证插件想要使用复选框的name-attribute对复选框进行分组。此名称属性应等于所有复选框和组。

我做了什么:

我使用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();

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

BUT:

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

2)当我运行validate()。form()时,它将遍历所有复选框,并为每个复选框检查所有其他复选框。那真的没必要。我怎么能避免这个?

1 个答案:

答案 0 :(得分:1)

总的来说,你的代码对我来说确实很好。我认为你已经干净地处理了asp:checkbox限制(你不能为asp:复选框指定'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”]以查看检查内容和不检查内容。