我的网站能够在多个网页上接收用户的付款。我原来是一个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文件本身抛出错误?
答案 0 :(得分:0)
我能够通过使用validator.addClassRules函数解决这个问题,并对我想用于实际验证的方法进行别名化。
我认为问题在于我在主页ready
函数中添加了主要表单验证,并且正在ready
函数之外设置用户控件验证。
所以最后我将验证移到了自己的函数中,在.js文件中,在设置ready
函数之前包含.js文件,然后调用函数在里面添加usercontrol验证页面ready
功能。