Я наблюдал очень странное поведение на странице ASP.NET WebForms. У меня есть некоторые элементы управления вводом с одним или несколькими валидаторами, назначенными им.CheckBox вызывает проверку только на Check, а не на Uncheck
Упрощенный пример управления TextBox
ввода:
<asp:TextBox ID="TextBoxX" runat="server"
CausesValidation="True"></asp:TextBox>
<asp:RequiredFieldValidator ID="V1" runat="server"
ControlToValidate="TextBoxX"
ErrorMessage="blah blah"
EnableViewState="False" />
<asp:RangeValidator ID="V2" Type="Integer" runat="server"
ControlToValidate="TextBoxX"
ErrorMessage="blah blah"
MinimumValue="0" MaximumValue="9999"
EnableViewState="False" />
<asp:CustomValidator ID="V3" runat="server"
ErrorMessage="blah blah"
OnServerValidate="MyCustomValidateMethod"
EnableViewState="False"
EnableClientScript="False" />
EnableViewState намеренно установлен в ложь, чтобы сохранить низкий уровень сетевой нагрузки. V3 является интересным. На сервере мой пользовательский метод будет проверять достоверность значения.
protected void MyCustomValidateMethod(object source, ServerValidateEventArgs args)
{//...}
До сих пор все работает должным образом. Но у меня также есть флажок, который позволяет пользователю явно переопределить проверку правдоподобия после появления предупреждения.
<asp:CheckBox ID="CheckBoxOverride" runat="server" Text="You can override here!"
AutoPostBack="True"
CausesValidation="True" />
Проверка/убрав CheckBox
вызывает постбэк как и ожидалось, но валидаторы (и особенно «V3» один) только вызывается, когда поле получает чек, но не тогда, когда он получает бесконтрольно!
Что вызывает это странное поведение и как его исправить?
Вот еще информация:
- Я использую .NET 3.5.
- Весь этот материал находится внутри одной UpdatePanel, если это имеет значение.
- Я могу явным образом позвонить
Page.Validate();
по обратной передаче, но это кажется мне грязным, и валидаторы затем вызывают дважды, когда флажок установлен.
Я установил ValidateEmtpyText в true на валидаторе V3, но это не изменяет поведение. – Marcel
Я намеренно пропустил ControlToValidate, потому что проверка не только полагается на элемент управления, но и на другие компоненты на стороне сервера. – Marcel
Это не только валидатор V3, который не вызван. При проверке все вызовы вызываются, при отключении никто не вызывается. – Marcel