1

我有一个网站,可以在多个页面上从用户那里收取款项。我最初是一名 winforms 编码员,因此我试图将付款所需的所有字段集中在一个自定义用户控件中。我已经设置好用户控件并准备就绪,现在正尝试使用 JQuery 插件实现验证。

我最初尝试将与 usercontrols 子控件相关的验证放在 usercontrol 本身上,当支付用户控件是页面上唯一的东西时,它似乎按预期工作,当除了支付之外还有其他信息需要时,问题就出现了得到验证。

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

我发现这个问题是关于根据控件的类名手动向单个控件添加验证。当我尝试这样做时,我在 JQuery.validate.js 文件本身中遇到错误(关于:if(command){var settings=$.data(element.form,'validator').settings;它的价值)在通过我的开发环境检查值后,我发现错误是$.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是用户控件内的文本框PaymentDialog,类名被硬编码为txtAccountnumber.

我的问题是首先,是否有可能做我正在尝试的事情?其次,有没有更好的方法来做到这一点?第三,我是否错过了实现导致 jquery.validate.js 文件本身引发错误的验证的关键步骤?

4

1 回答 1

0

我能够通过使用 validator.addClassRules 函数并为我想用于实际验证的方法设置别名来解决这个问题。

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

所以最后我把验证移到了它自己的函数中,放在一个 .js 文件中,在设置ready函数之前包含 .js 文件,然后调用该函数在 pagesready函数中添加 usercontrol 验证。

于 2013-04-29T15:52:46.567 回答