Регулятор регулярного выражения - блок отображения, а не встроенный, когда динамический
Есть ли способ сделать 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?