Регулятор регулярного выражения - блок отображения, а не встроенный, когда динамический

Есть ли способ сделать RegularExpressionValidator визуализировать себя, используя display: block вместо отображения: inline в атрибуте стиля, при установке свойства Display на "Display = 'Dynamic"?

Я попытался установить его в таблице стилей, но это будет перезаписано, когда оно отображается на странице.

Спасибо

Ответы

Ответ 1

Идея выше об использовании css с! Важно было так близко, что я мог попробовать. Используя эту идею и селектора атрибутов CSS, я сделал это. Мне пришлось использовать селектор "contains", чтобы он работал в FF, но теперь я тестировал его в IE10, FF и Chrome, и пока он работает. Это действительно просто. Вот пример проверки подлинности на моей странице aspx

<asp:RequiredFieldValidator runat="server" ID="rfvRequired" ErrorMessage="This is required.<br/>This is line 2" ControlToValidate="tbRequired" ValidationGroup="CommonAttributesValidationGroup" SetFocusOnError="True" CssClass="valerror" Display="Dynamic"></asp:RequiredFieldValidator>

Затем у меня есть стиль для valerror.

span.valerror[style*="inline"]
{
    display:block !Important;
    background-color: Yellow;
    border: 1px solid #cccccc;
    font-size:.9em;
}

Вот и все. как это работает: когда диапазон изменяет стиль с "display: none" на "display: inline", селектор атрибутов на промежутке ударяет и заставляет его быть блоком. Вам просто нужно сделать одну запись css, как выше, и убедиться, что вы делаете каждый валидатор этого класса.

Ответ 2

Просто заверните валидатор в div:

<div><asp:RegularExpressionValidator id="x" runat="server"></div>

Ответ 3

Как насчет использования !important в классе CSS?

Ответ 4

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

Итак, изначально мы имеем это: enter image description here

Тогда, если есть ошибка, это выглядит так: enter image description here

Ответ 5

Я нашел решение, которое решает это с помощью элемента управления шаблонами:

<asp:RequiredFieldValidator runat="server" EnableClientScript="True" Display="Dynamic" >
   <TemplateControl>
      <span class="error">This field is required.</span>
   </TemplateControl>
</asp:RequiredFieldValidator>

CSS

.error{position:relative;display:block;}

Получающийся html является немного беспорядочным, но он позволяет отображать: блок, который подталкивает проверку на следующую строку;

<span id="ctl00_###" style="color: red; display: inline; ">
   <templatecontrol>
      <span class="error">This field is required.</span>
   </templatecontrol>
</span>

Ответ 6

Работает с .Display = ValidatorDisplay.Static для меня, не устанавливает EnableClientScript в true.

Обновить 1 и затронуть cssClass классом, имеющим display: block; для каждого regValidator

Обновить 2 забыть о том, что я написал раньше, я думаю, вам все равно сейчас об этом, но для других, я бы сказал, я думаю, что забыть о MS о regExpVal не отвечать до display: block причина customValidator, похоже, работает.

Итак, для regExpValidator я обнаружил, что работает clear:left; и float:left, и если элемент под ними перемещается при появлении ошибок, вы помещаете на него clear: left.

Ответ 7

Это может помочь (взято из MSDN):

Поведение дисплея зависит от является ли проверка на стороне клиента выполнено. Если проверка на стороне клиента не активен (поскольку браузер не поддерживает его или потому, что он были отключены с помощью Параметр page.ClientTarget или Свойство EnableClientScript), ValidatorDisplay.Static и ValidatorDisplay.Dynamic ведет себя то же самое: сообщение об ошибке пространство, только если оно отображается. способность динамически выделять пространство для сообщения, когда оно не отображается (ValidatorDisplay.Dynamic) работает только с клиентской стороны проверка.

Ответ 8

ASP.NET внедряет javascript файл с кодом проверки, второй тег script после тега формы в HTML. Он содержит функцию "ValidatorUpdateDisplay", которая вызывается для отображения/скрытия сообщений проверки. Это можно переопределить, чтобы использовать разные javascript для отображения/скрытия, например. если вы используете jquery:

ValidatorUpdateDisplay = function (val) {
    // Show/hide this validator error message
    if (val.isvalid){
        $(val).hide();
    } else {
        $(val).show();
    }
}

Или в вашем случае:

ValidatorUpdateDisplay = function (val) {
    // Show/hide this validator error message
    if (val.isvalid){
        val.style.display = 'none';
    } else {
        val.style.display = 'block';
    }
}

Просто введите этот код в тег script после тега открытия формы ASP.NET. Обратите внимание, что это повлияет на все валидаторы на странице и игнорирует, будет ли Display установлен в Dynamic - если вы хотите поддержать это, вы можете расширить его с помощью кода из исходной функции или настраиваемого кода, чтобы проверить тип проверки.

Также см. этот вопрос У вас есть пользовательская проверка JavaScript на стороне клиента для стандартных валидаторов веб-форм ASP.NET?