Обязательное поле Validator неправильно не проходит проверку в отключенном текстовом поле

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

Когда текстовое поле включено, валидатор ведет себя правильно.

Кто-нибудь может сказать мне, почему?

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

Вот соответствующий HTML-код со страницы (урезанный):

    <tr id="trBrokerNetID" runat="server">
    <td>
        <cc1:mitextbox id="txtBrokerNetID" runat="server" cssclass="bodytext" width="220px" maxlength="20" onBlur="JavaScript:CheckBrokerBranch(false);"></cc1:mitextbox>
        <asp:requiredfieldvalidator id="rfvBrokerNetID" runat="server" width="1px" errormessage="BrokerNetID - Please supply a value" controltovalidate="txtBrokerNetID">*</asp:requiredfieldvalidator>
    </td>
</tr>

Любые идеи с благодарностью принимаются.


person user129345    schedule 07.10.2009    source источник
comment
Я настоятельно рекомендую вам отредактировать свой вопрос для краткости. Попробуйте поставить вопрос вверху, а подробности ниже. Людям гораздо проще быстро увидеть, могут ли они ответить на ваш вопрос.   -  person csl    schedule 07.10.2009
comment
Хорошая мысль... думаю, это означает, что вы не можете ответить на вопрос ;o›   -  person user129345    schedule 07.10.2009


Ответы (3)


Чего я не знал, так это того, что когда элемент управления отключен на стороне клиента, он не включается в обратную передачу.

Вот почему проверка на стороне сервера срабатывала. Что касается контроля, то он был пуст.

Решение состоит в том, чтобы использовать свойство readOnly, а не свойство disabled.

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

person user129345    schedule 08.10.2009

Валидаторы ASP.NET работают загадочным образом :D

Во-первых, опасно использовать идентификатор элемента управления ASP.NET для доступа к нему в jQuery. Если вы поместите элемент управления в повторитель или обернете страницу главной страницей, то идентификатор элемента html будет отличаться от указанного вами идентификатора. Вместо этого используйте класс для доступа к элементу.

Если валидаторы ASP.NET хотят, чтобы это поле было включено, вы должны попробовать другой подход. Мое предложение было бы таким:

1. Добавьте класс в текстовое поле, чтобы оно выглядело отключенным:

$("#txtBrokerNetID").addClass("thisClassMakesItLookDisabled");

2. Добавьте событие, которое проверяет фокус на текстовое поле и размывает его, если фокус есть:

$("#txtBrokerNetID").focus(function() {
  $(this).blur();
});

Теперь поле ведет себя так, как будто оно отключено и работает валидатор.

person EmKay    schedule 07.10.2009
comment
Элемент управления думал об использовании подхода «Я только для чтения, но не отключен честно», но не знал, как поступить. Спасибо за это я попробую - person user129345; 07.10.2009

Один из вариантов, который вы можете выбрать, — установить ValidationGroup, а не ту, которую использует форма, а затем при проверке формы вызвать Page_ClientValidate('text_validation_group'), если это необходимо. Таким образом, проверка клиента не будет мешать.

person MaLKaV_eS    schedule 07.10.2009