2013-04-26 2 views
1

У меня есть веб-сайт, который может принимать платежи от пользователя на нескольких страницах. Я изначально кодер winforms, поэтому я пытаюсь централизовать все поля, которые требуются для оплаты в одном пользовательском элементе управления. У меня есть пользовательский элемент управления, который настроен и готов к работе, и теперь я пытаюсь выполнить проверку с помощью плагина JQuery.Использование проверки JQuery в пользовательском usercontrol

Первоначально я попытался поместить проверку, привязанную к дочерним элементам usercontrols на самом пользовательском контроле, и когда пользовательский контроль платежей был единственным на странице, он, казалось, работал должным образом, проблема возникла, когда была другая информация, кроме платеж, который необходимо проверить.

Это выглядело так, потому что форма, содержащая все элементы управления, имела только одно имя (очевидно), декларация проверки Usercontrols уничтожала основные страницы, подтверждающие объявление, потому что, если я удалил пользовательские элементы управления, подтвердите объявление, то основные страницы валидация работает как ожидалось, и наоборот.

Я нашел this вопрос, который говорит о том, чтобы вручную добавить проверку на отдельные элементы управления на основе имени класса элемента управления. Когда я попытался сделать это, я получил ошибку в самом файле JQuery.validate.js (по адресу: if(command){var settings=$.data(element.form,'validator').settings; за то, что его стоит) После изучения значений через мою среду dev я обнаружил, что ошибка в том, что $.data(element.form,'validator') не объявлен, t ссылается на настройки.

Форма и контроль деклараций:

<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> 

Главная Validation Декларация:

$.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, а имя класса жестко закодировано до txtAccountnumber.

Мои вопросы в первую очередь, можно ли делать то, что я пытаюсь? Во-вторых, есть ли лучший способ сделать это? И в-третьих, не хватает ли я ключевого шага в реализации проверки, которая вызывает сам файл jquery.validate.js, чтобы вызвать ошибку?

ответ

0

Мне удалось решить эту проблему с помощью функции validator.addClassRules и наложения методов, которые я хотел использовать для фактической проверки.

Я считаю, что проблема заключалась в том, что на основных страницах была добавлена ​​основная форма проверки, а функция проверки элементов управления пользователя была установлена ​​вне функции ready.

Таким образом, в конце концов, я переместил проверки на свою собственную функцию в .js файл на стороне, включал .js файл перед настройкой функции ready и затем называет функцию, чтобы добавить проверку UserControl внутри страниц ready функция.

Смежные вопросы