Остановить обратную передачу на TextChanged - PullRequest
4 голосов
/ 06 октября 2009

У меня есть текстовое поле на странице aspx, к которому прикреплено событие TextChanged. У меня также есть валидатор, прикрепленный к текстовому полю.

При изменении текста запускается валидация, но в случае ошибки, текстовое событие все равно вызывается. Знаете ли вы, можно ли остановить постбэк на textaged, если сработает валидатор?

<asp:TextBox ID="txtQuantity" runat="server" AutoPostBack="true" ontextchanged="txtQuantity_TextChanged"></asp:TextBox>
<asp:RequiredFieldValidator ID="reqQuantity" ControlToValidate="txtQuantity" runat="server" ErrorMessage="The quantity is mandatory."></asp:RequiredFieldValidator>

Ответы [ 5 ]

4 голосов
/ 17 декабря 2013

Добавьте CausesValidation="true" для текстового поля, и это будет хорошо. Если валидация недействительна, постбэк не будет.

<asp:TextBox ID="txtQuantity" runat="server" AutoPostBack="true" ontextchanged="txtQuantity_TextChanged" CausesValidation="true"></asp:TextBox>

3 голосов
/ 06 октября 2009

Вы можете переместить проверку на клиентскую сторону, добавив атрибут EnableClientScript="true". Обратная передача не произойдет, поскольку проверка будет выполняться с помощью JS.

Кроме этого, вы можете проверить, является ли страница действительной при выполнении функции обратного вызова для события TextChanged, чтобы определить, может ли функция продолжаться. Вы должны добавить атрибут ValidationGroup в свой валидатор и вызвать функцию Page.Validate, указав эту группу перед проверкой Page.IsValid.

Upd

Вот совет.

Добавьте свою собственную функцию JS, например ::

function IsValid( args ) {
        if( args.value.length == 0 ) {
            return false;
        }
        else {
            return true;
        }
    }

В Page_Load событие добавить этот код:

txtQuantity.Attributes[ "onchange" ] = "if ( IsValid(this) == false ) return;";

Это не испортит автоматическую обратную передачу при правильном вводе, но предотвратит обратную передачу в противном случае.

0 голосов
/ 09 августа 2018

В своей функции проверки клиента я проверяю тип события, в котором я нахожусь. Если событие показывает меня в событии изменения, я утверждаю, что проверка прошла успешно, и я ухожу.

		if (event.type === 'change') {
			args.IsValid.true;
      return;
		}

Я считаю, что это лучшее решение, так как вы можете оставить проводник подключенным и установить текстовое поле на свое усмотрение и больше не беспокоиться о событии изменения, вызывающем проверку.

0 голосов
/ 22 ноября 2013

Просто делюсь встроенной, более короткой версией принятого ответа:

<asp:TextBox ID="txtQuantity" runat="server"
    AutoPostBack="true" ontextchanged="txtQuantity_TextChanged"
    onchange="if (this.value.length == 0) return;"></asp:TextBox>

Имея ту же проблему с RequiredFieldValidator, вышеописанное сработало для меня.

Известный клятва: дизайнер жалуется, что "onchange" не является допустимым атрибутом на стороне сервера.

0 голосов
/ 06 октября 2009

попробуйте после изменения AutoPostBack = "true", так как AutoPostBack = "false" ..

...