Как использовать пользовательский валидатор для нескольких элементов управления?

У меня есть поля даты, и я хочу проверить, выбраны ли обе даты или нет. Я добавил следующий customValidator

<asp:CustomValidator ID="CustomValidator3" runat="server" ErrorMessage="CustomValidator" Text="You must select both or no dates" ClientValidationFunction="dateValidate"  ValidateEmptyText="false" Font-Size="Small" Font-Bold="True" ForeColor="Red" SetFocusOnError="True"></asp:CustomValidator>

Но это не работает, если я не добавляю customvalidator. Моя функция на стороне клиента ниже. Этот метод работает отлично, в противном случае, когда я проверяю в полях даты напрямую, но я пытаюсь реализовать его с помощью customvalidator.

    function dateValidate(sender, args) {

        var From = document.getElementById('dataContentplaceholder_wdpFrom').title;

        var To = document.getElementById('dataContentplaceholder_wdpTo').title;
        if (From.toString.length == 0 && To.toString.length >=1 || To.toString.length == 0 && From.toString.length >=1) {

            args.IsValid = false;
        }
        else {

            args.IsValid = true;
        }
    }

2 ответа

Решение

Если поля даты отображаются как TextBoxes (я не знаком с Infragistics), вы можете использовать разметку, подобную этой:

<asp:TextBox ID="txtBox1" runat="server" onchange="ValidateTexts();" ... />
<asp:TextBox ID="txtBox2" runat="server" onchange="ValidateTexts();" ... />
<asp:CustomValidator ID="customValidator1" runat="server" Text="You must select both or no dates" ForeColor="Red" ClientValidationFunction="txtValidate"  ValidateEmptyText="true" ... />

Со следующим клиентским кодом:

function ValidateTexts() {
    ValidatorValidate(document.getElementById('<%= customValidator1.ClientID %>'));
}

function txtValidate(sender, args) {
    var from = document.getElementById('<%= txtBox1.ClientID %>').value;
    var to = document.getElementById('<%= txtBox2.ClientID %>').value;
    args.IsValid = (from.length == 0 && to.length == 0) || (to.length > 0 && from.length > 0);
}

onchange Обработчик события вызывается, когда измененное поле теряет фокус. Без этого проверка выполняется только при запуске обратной передачи.

Ваш customValidator должен быть запущен некоторой кнопкой отправки.

<asp:ValidationSummary ID="vs" runat="server" />
<asp:TextBox ID="txtBox1" runat="server" ... />
<asp:TextBox ID="txtBox2" runat="server" ... />
<asp:CustomValidator ID="cVal" runat="server" ErrorMessage="You must select both or no dates" ClientValidationFunction="valDates">&nbsp;</asp:CustomValudator>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" />

function valDates(s, e){
    var txt1 = document.getElementById(s.id.replace('cVal', 'txtBox1'));
    var txt2 = document.getElementById(s.id.replace('cVal', 'txtBox2'));
    if(!(txt1.value && txt2.value) && !(!txt1.value && !txt2.value))
        e.IsValid = false;
}
Другие вопросы по тегам