asp.net requiredfieldvalidator не работает, когда visible=false

У меня есть несколько обязательных валидаторов на моем сайте asp.net, которые я хочу сделать невидимыми до тех пор, пока они не понадобятся. Но когда я устанавливаю их в visible=false, они не срабатывают. Они работают, если они установлены visible=true.

Это правильное поведение этого элемента управления или это неправильно. Я хочу, чтобы они были невидимыми из-за проблем со стилем, когда они видны.


person espvar    schedule 15.02.2012    source источник
comment
Что значит сделать их невидимыми? RequiredFieldValidator не отображает сообщение, если в этом нет необходимости, то есть, если вы не нажмете кнопку, которая запускает проверку, и обнаружит, что чего-то не хватает   -  person Shai    schedule 15.02.2012
comment
Но если их не видно, как вы ожидаете, что они будут действительными?   -  person Rick Hoving    schedule 15.02.2012
comment
Текстовое поле для проверки видно, и я хочу, чтобы валидатор поля был невидимым до тех пор, пока он не понадобится. Вот почему я установил для свойства visible=false, а для свойства enabled значение true.   -  person espvar    schedule 15.02.2012
comment
Зачем делать его невидимым? он уже невидим, если только проверка не пойдет не так (т.е. текстовое поле пусто после нажатия кнопки)   -  person Shai    schedule 15.02.2012


Ответы (5)


Установка Visible="false" в ASP.NET приведет к тому, что элемент не будет отображаться на странице. Таким образом, он по существу не существует на стороне клиента. Они должны быть невидимыми по умолчанию и будут отображаться только в том случае, если критерии требований не соблюдены (или они иным образом принудительно используются с помощью IsValid="false").

Вы можете поиграть со свойством Display, чтобы облегчить режимы компоновки - но у меня такое ощущение, что это не совсем связано с тем, что вы хотите сделать.

person Grant Thomas    schedule 15.02.2012
comment
Хороший момент - есть обходной путь для этой проблемы: установите для свойства css display значение none, а затем, когда потребуется, чтобы снова быть видимым (я не вижу в этом абсолютно никакого смысла, так как этот элемент управления «невидим», если проверка не пойдет не так) с помощью настроек от display до inline — оба варианта можно выполнить на стороне клиента - person Shai; 15.02.2012
comment
Просто используйте Display=dynamic, который скрывает его (display: none) до тех пор, пока он не сработает, а затем покажет его встроенным. - person Sean Kendle; 12.10.2016

Я предполагаю, что это потому, что по умолчанию RequiredFieldValidator скрывает себя, устанавливая visibility на hidden.

Чтобы вместо этого изменить display на none (что не оставит пустого пробела на странице), удалите атрибут Visible="False" и добавьте этот атрибут в элемент управления:

Display="Dynamic"
person greg84    schedule 15.02.2012

Попробуйте сделать это:

$("#myField").hide();

в jQuery или:

style="display:none"

внутри входного тега.

Затем он будет отображаться, но просто не виден.

person ParPar    schedule 15.02.2012

Свойство Visible элемента управления asp.net не имеет ничего общего со стилем. Используйте css для этого. Visible управляет отображением/рендерингом элемента управления или нет. Может быть, вы ищете Display="Dynamic"?

person Mikael Härsjö    schedule 15.02.2012
comment
css для моего валидатора имеет красную рамку. Так что, когда visible=true на валидаторе, он отображается как красная точка. - person espvar; 15.02.2012

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

Это должно в значительной степени сделать то, что вам нужно сделать.

person Vijay Jagdale    schedule 11.03.2016