Al-Farooque Shubho
Очень хороший вопрос.
Я бы не назвал это жучком. Нам нужно понять, что на самом деле происходит под капотом.
Когда вы устанавливаете Display="Dynamic" , свойство Validator controls style фактически устанавливается как "display:none" и, следовательно, оно не сохраняет никакого пространства, когда теперь отображается валидатор.
Если вы используете firebug, вы увидите, что элемент управления Validator будет отображать следующий HTML-код:
<span style="color: Red; display: none;" id="RequiredFieldValidator1">RequiredFieldValidator</span>
И когда вы устанавливаете Display="Static", свойство стиля элемента управления Validator фактически устанавливается как "visibility:hidden", что фактически сохраняет пространство в пользовательском интерфейсе, когда валидатор не отображается.
Если вы используете firebug, то увидите, что элемент управления Validator теперь будет отображать следующий HTML-код:
<span style="color: Red; visibility: hidden;" id="RequiredFieldValidator1">RequiredFieldValidator</span>
Теперь позвольте мне объяснить, что происходит, когда установлен параметр Display="Dynamic".
--Вы просматриваете страницу и нажимаете кнопку, не помещая никакого текста в текстовое поле. Отображается сообщение об ошибке проверки.
--Вы кладете какой-то текст в текстовое поле и пытаетесь нажать кнопку. Это приводит к тому, что событие javascript "onmouseout" срабатывает на элементе управления текстовым полем (перед запуском события "onclick" на кнопке), что приводит к тому, что валидатор снова проверяет текстовое поле, ошибка не обнаруживается и свойство стиля элемента управления валидатором устанавливается в "display:none".
--Это приводит к тому, что соответствующий HTML-элемент элемента управления валидатора (span) отказывается от своего места в пользовательском интерфейсе, и, следовательно, весь пользовательский интерфейс перерисовывается в браузере. Таким образом, кнопка находит свое новое место и занимает пространство, которое было сохранено пространством элемента управления валидатора (span).
--Пользовательский интерфейс while перекрашивается до того, как ваше событие click будет выполнено на кнопке. Таким образом, на самом деле ваше событие click в браузере вообще не выполняется. Итак, ничего не происходит, и вам нужно снова нажать на кнопку.
Чтобы проверить вышеприведенное объяснение, вы можете выполнить быстрый тест следующим образом:
--Снова обновите браузер.
--Нажмите кнопку, не помещая никакого текста в текстовое поле. Появится сообщение об ошибке проверки.
--Напишите какой-нибудь текст в текстовом поле и нажмите на любое место в браузере (не на кнопку).
--Это вызовет событие "onmouseout" текстового поля, валидатор будет запущен, сообщение об ошибке исчезнет, и кнопка заменит место сообщения проверки. Тот же результат.
Так что на самом деле это не ошибка. Скорее всего, это просто то, что мы должны понимать, что происходит под капотом, когда мы устанавливаем Display="Dynamic", и это нам нужно соответствующим образом настроить наши коды/реализацию.
Надеюсь, это поможет.