jQuery UI datetimepicker и ASP.NET CompareValidator для DataTypeCheck - PullRequest
2 голосов
/ 22 октября 2009

Я использую текстовое поле ASP.NET с датчиком выбора jQuery UI. Текстовое поле позволяет редактировать, чтобы пользователь мог ввести дату вручную или очистить существующую запись. Я добавил CompareValidator для проверки типа данных в текстовом поле, и это вызывает ошибку после выбора даты с помощью средства выбора даты. Ошибка возникает при проверке на стороне клиента ASP.NET:

Microsoft JScript runtime error: 'length' is null or not an object

ошибка возникает в ValidatorOnChange. Как я могу это исправить? Можно ли использовать средство выбора даты с элементами управления ASP.NET?

Моя разметка:

<asp:Label runat="server" AssociatedControlID="uxInstallDate">Install Date</asp:Label>
<asp:TextBox ID="uxInstallDate" runat="server" Columns="10" />
<asp:CompareValidator runat="server" ControlToValidate="uxInstallDate" Operator="DataTypeCheck" Type="Date" Text="*" ErrorMessage="Install Date must be a date." Display="Dynamic" />

Обратите внимание, что отсутствующий атрибут ID в CompareValidator является преднамеренным, и добавление его не имеет значения. Моя инициализация jQuery:

$(document).ready(function() {
    $("#<%= uxInstallDate.ClientID %>").datepicker({ changeMonth: true });
});

Ответы [ 2 ]

7 голосов
/ 22 октября 2009

Я думаю, что нашел решение. Это ошибка, которая возникает в IE, а не в Firefox (я не тестировал другие браузеры). Решением было переопределить метод onSelect при инициализации:

$("#<%= uxInstallDate.ClientID %>").datepicker({ changeMonth: true, onSelect: function() { } });

Я нашел описание проблемы и решение здесь и альтернативное решение здесь .

0 голосов
/ 09 августа 2011

Основываясь на решении Джейми и альтернативном решении, которое он предоставляет, вот мой обходной путь, чтобы обойти эту странную ошибку, которая возникает только в IE.

Я предполагаю, что дата, выбранная элементом управления datepicker, является действительной датой, поэтому я скрываю сообщение или ошибку изображения CompareValidator, если она видна.

$(".myControl").datepicker({
    onSelect: function() {
        if ($.browser.msie) {
            if ($(this).next("span").css("display") != "none") {
                $(this).next("span").css("display", "none");
            }
        }
        else {
            $(this).trigger('change');
        }
    }
 });

Надеюсь, что помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...