在自定义usercontrol中使用JQuery验证

时间:2013-04-26 20:50:41

标签: jquery asp.net validation jquery-plugins

我的网站能够在多个网页上接收用户的付款。我原来是一个winforms编码器,所以我试图集中所有需要在一个自定义用户控件中付款的字段。我有用户控件所有设置并准备好了,现在我正在尝试使用JQuery插件实现验证。

我最初尝试将验证与usercontrols子控件绑定在usercontrol本身上,当付款用户控件是页面上唯一看起来按预期工作的东西时,问题出现时除了付款之外还有其他信息需要验证。

在我看来,因为包含所有控件的表单只有一个名称(显然)usercontrols validate声明正在擦除主页验证声明,因为如果我删除了自定义控件验证声明,那么主页验证按预期工作,反之亦然。

我发现了this问题,该问题涉及根据控件的类名手动向各个控件添加验证。当我尝试这样做时,我在JQuery.validate.js文件中遇到错误(在:if(command){var settings=$.data(element.form,'validator').settings;上它的价值)在通过我的开发环境检查值后,我发现错误是{{1未声明,因此无法引用设置。

表格和控制声明:

$.data(element.form,'validator')

主页验证声明:

<form id="MasterPageForm" runat="server" class="entireForm">
    <asp:TextBox id="txtmoveInDate" class="txtmoveInDate" runat="server" />
    <mo:PaymentDialog runat="server" ID="PaymentInput" ClassName="SubmitPayment" DisplayDesc="Submit" IsAmmountEditable="false" />
</form>

类选择器验证声明:

$.validator.setDefaults();
$(document).ready(function() {
    $('#aspnetForm').validate({
        rules: {
      <%=txtmoveInDate.UniqueID%>:  { required: true, date: true }
        }
        messages: {
      <%=txtmoveInDate.UniqueID%>: {
                required: "Please enter the move in date.",
                date: "Please enter a valid move in date."
   }
    }
});

这是页面的一个非常淡化的版本,但所有其他控件的声明方式相同,只是包含太多这些控件。部分在页面上显示的顺序与我在此处列出的顺序相同。 $('.txtAccountnumber').rules("add", { required: true, creditcard: true, minlength: 15, maxlength: 16 }); $('.txtAccountnumber').messages("add", { required: "You must supply the credit card account number.", minlength: "Please enter a valid Credit Card account number.", maxlength: "Please enter a valid Credit Card account number.", creditcard: "Please enter a valid Credit Card account number." }); txtAccountnumber usercontrol中的文本框,类名称已硬编码为PaymentDialog

我的问题是第一,是否有可能做我正在尝试的事情?第二,有没有更好的方法来实现这一目标?第三,我是否错过了实施验证的关键步骤,导致jquery.validate.js文件本身抛出错误?

1 个答案:

答案 0 :(得分:0)

我能够通过使用validator.addClassRules函数解决这个问题,并对我想用于实际验证的方法进行别名化。

我认为问题在于我在主页ready函数中添加了主要表单验证,并且正在ready函数之外设置用户控件验证。

所以最后我将验证移到了自己的函数中,在.js文件中,在设置ready函数之前包含.js文件,然后调用函数在里面添加usercontrol验证页面ready功能。