CustomValidator Javascript функция считает, что переключатель не установлен - PullRequest
0 голосов
/ 23 ноября 2010

У меня есть пользовательский элемент управления, который содержит ряд переключателей и некоторые текстовые поля на нем. Если установлен определенный переключатель, я хочу проверить содержимое двух текстовых полей.

Моя контрольная разметка содержит это:

<asp:TextBox ID="FromDate" runat="server" Columns="8"></asp:TextBox>
<asp:TextBox ID="ToDate" runat="server" Columns="8"></asp:TextBox>
<asp:RadioButton runat="Server" ID="RadioBetween" GroupName="Date" CssClass="date_group_options_control_radio"/>
<asp:CustomValidator ID="DateValidator" runat="server" Display="Dynamic" ClientValidationFunction="ValidateDateFields_Client" OnServerValidate="ValidateDateFields"></asp:CustomValidator>

<script type="text/javascript">
function ValidateDateFields_Client(source, args)
{
    debugger;
    var bRadioBetweenSelected = false;

    var oRadio = document.getElementById('<%=RadioBetween.ClientID%>');
    if (oRadio != null && (oRadio.checked == true || oRadio["checked"] == true))
    {
        bRadioBetweenSelected = true;
    }

    if (bRadioBetweenSelected)
    {
        var oFromDate = document.getElementById('<%=FromDate.ClientID%>');
        var oToDate = document.getElementById('<%=ToDate.ClientID%>');

        if (oFromDate != null && oToDate != null)
        {
            var sFromDate = oFromDate.value;
            var sToDate = oToDate.value;

            source.innerHTML = ValidateFromToDate(sFromDate, sToDate, args);
        }
        else
        {
            args.IsValid = true;
        }
    }
    else
    {
        args.IsValid = true;
    }
}
</script>

ValidateFromToDate просто проверяет значения и проверяет их правильность.

Это никогда не проверяется, потому что я не могу сказать, проверен ли RadioBetween или нет. Однако код на стороне сервера работает нормально (что делает то же самое).

Если я вручную установил Checked как «true» в элементе управления, он будет работать как положено.

Как я могу проверить эту сторону клиента, чтобы сохранить поездку на сервер? Что я делаю неправильно? Это должен быть довольно тривиальный код: -)

Ответы [ 4 ]

0 голосов
/ 23 ноября 2010

Оказывается, это потому, что у меня есть две версии одного элемента управления на одной странице.Скрытый (в глубине модального диалога) конфликтует с основным.Функция проверки клиента вызывается дважды для элементов управления в скрытом элементе управления.

Почему это еще неизвестно, но при комментировании второго экземпляра элемента управления все работает нормально.

Каждый день ASP.NET смущает меня: -)

Причина обсуждается здесь: Пользовательский контроль с клиентской + серверной пользовательской проверкой;Неправильный клиентский валидатор выбран

0 голосов
/ 23 ноября 2010

Вы можете локализовать проблему с помощью FireBug или другого средства отладки JavaScript. Поместите точки останова в вашу функцию и посмотрите, какие значения вставляются в переменные на каждом шаге выполнения.

0 голосов
0 голосов
/ 23 ноября 2010

Не понятно, почему вы используете RadioButton. Обычно существует более одной кнопки RadioButton с одинаковым именем группы. Может быть, вам просто нужен CheckBox?

...