Как я могу отключить ASP.NET обязательное поле проверки поведения "потерял фокус" - PullRequest
12 голосов
/ 23 июня 2010

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

Этот подход хорошо работает, когда кнопки нажимаются, но оба средства проверки показывают, если я ввожу значение в текстовое поле, а затем удаляю его.

Есть ли способ отключить эту проверку "потерянного фокуса"? Мне нужно только проверить, когда кнопки нажаты.

EDIT

К сожалению, если я установлю EnableClientScript = false, у меня не будет каких-либо клиентских уведомлений. Я хочу, чтобы динамическое сообщение об ошибке отображалось (эффективно в событии OnClientClick кнопки), а не «потерял фокус» текстового поля.

Есть ли способ отключить или "отцепить" событие клиента lostfocus?

EDIT

Сочетание ответа dDejan и ответа womp здесь решило проблему идеально.

Мой окончательный код выглядит следующим образом (для тех, у кого похожая ситуация) ...

Javascript ...

<script type="text/javascript">

    $(document).ready(function() {
        $('body').fadeIn(500);

        //Turn off all validation = its switched on dynamically
        $.each(Page_Validators, function(index, validator) {
                ValidatorEnable(validator, false);
        });
    });

    function ToggleValidators(GroupName) {

        $.each(Page_Validators, function(index, validator) {
            if (validator.validationGroup == GroupName) {

                ValidatorEnable(validator, true);

            } else {
                ValidatorEnable(validator, false);
            }
        });
    }

</script>

Пример управления ASPX ...

<telerik:RadTextBox Width="196px" ID="txtFirstName" runat="server" MaxLength="50" Skin="Black"></telerik:RadTextBox>
<asp:RequiredFieldValidator ID="valFirstName" CssClass="Validator" runat="server" EnableClientScript="true" Display="Dynamic" ErrorMessage="You  must enter your first name." ControlToValidate="txtFirstName" ValidationGroup="NeededForEmail"></asp:RequiredFieldValidator>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" CssClass="Validator" runat="server" EnableClientScript="true" Display="Dynamic" ErrorMessage="You  must enter your first name." ControlToValidate="txtFirstName" ValidationGroup="NeededForSubmit"></asp:RequiredFieldValidator>

Код кнопки ASPX ...

<asp:Button ID="btnGetConfCode" runat="server" Text="Get Confirmation Code" OnClientClick="ToggleValidators('NeededForEmail')" OnClick="btnGetConfCode_Click" Width="100%" ValidationGroup="NeededForEmail"/>

<asp:Button ID="btnRegisterUser" runat="server" Text="Register" OnClientClick="ToggleValidators('NeededForSubmit')" OnClick="btnRegisterUser_Click" Width="100px" ValidationGroup="NeededForSubmit" />

Итак, теперь нет проверки, пока пользователь не нажмет кнопку «Получить код подтверждения по электронной почте» или кнопку «Зарегистрироваться».

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

Если они нажимают кнопку «Зарегистрироваться», то все элементы управления проверяются, и мы видим только одно сообщение проверки.

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

Спасибо за помощь, ребята

Ответы [ 8 ]

5 голосов
/ 25 июня 2010

Вы можете установить, активированы ли валидаторы с кодом на стороне клиента, используя функцию ValidatorEnable. В основном это выглядит так

var validator = document.getElementById('<%=Validator1.ClientID%>');
ValidatorEnable(validator , state); //where state is boolean

Вы также можете активировать валидатор для проверки какого-либо события (например, нажатия кнопок), используя функцию ValidatorValidate(validator).

Я не уверен, что будет лучше для вас (включение / отключение валидаторов или пользовательский запуск валидации), но я предлагаю эту статью, которая поможет вам в правильном направлении

Проверка ASP.NET по глубине

2 голосов
/ 23 июня 2010

Нет способа отсоединить их, если EnableClientScript = true.

Что вы можете сделать, это установить его в false.Затем создайте метод проверки javascript, который вызывается для события onClientClick кнопки submit.

В вашем методе вам придется вызывать ValidatorValidate (control) для каждого элемента управления, который вы хотите проверить на стороне клиента

Вот пример:

http://msdn.microsoft.com/en-us/library/Aa479045#aspplusvalid_clientside

0 голосов
/ 30 сентября 2015

просто введите этот код в page_load событие

textboxname.Attributes.Add("onblur","ValidatorOnChange(event);");
0 голосов
/ 12 февраля 2012

Попробуйте сбросить событие onchange для элемента управления вводом.

$(document).ready(function () {
        $("#controlid").each(function () { this.onchange = null; })
    });
0 голосов
/ 27 января 2012
var validator = document.getElementById('<%=Validator1.ClientID%>');
ValidatorEnable(validator , state); 

Он работает в javascript, но когда мы используем страницу. Недопустимая функция на стороне сервера создает проблему для проверки правильности страницы.

0 голосов
/ 25 июня 2010

Попробуйте включить при нажатии обеих кнопок, используя JavaScript, и отключите его в случае размытия текстового поля.

0 голосов
/ 24 июня 2010

Вместо этого вы можете использовать пользовательские элементы управления Validator и либо проверять ввод, используя Javascript на клиенте, либо в обработчике событий на сервере.Убедитесь, что вы установили ValidateEmptyText = "true" в элементах управления проверкой, в противном случае события не будут запускаться в пустом поле.

0 голосов
/ 23 июня 2010

Вы можете отключить проверку JavaScript, установив EnableClientScript = "false", что избавит от проверки потерянного фокуса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...