ASP.NET DataList — проверка JavaScript всех текстовых полей

Простая настройка: Корзина в виде списка данных.

В заголовке есть две кнопки: «Обновить количество» и «Удалить выбранные элементы».

Каждый элемент DataList имеет (среди прочего) текстовое поле с id="txtQty", в котором хранится количество товара в корзине.

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

У меня есть логика для фактического сохранения, но теперь я вернусь, чтобы добавить дополнительную проверку. Я надеялся вызвать единственную функцию JavaScript из события OnClientClick кнопки UpdateQuantities, которая затем перебрала бы все элементы DataListItem, нашла текстовое поле txtQty и удостоверилась, что это допустимый числовой ввод.

Мне немного трудно понять, как лучше всего это сделать. Пока моя единственная реальная идея заключалась в том, чтобы пройтись по элементам формы и найти что-нибудь с идентификатором, который соответствует «txtQty» (поскольку ASP.NET автоматически перезаписывает идентификатор), а затем проверить этот конкретный элемент. Это не похоже на лучшее решение. Есть ли идеи получше?


person TheTXI    schedule 14.05.2009    source источник


Ответы (4)


Почему бы не поместить валидатор в свой DataGrid, чтобы проверить, является ли количество допустимым числом? Это было бы самым простым на сегодняшний день.

Если это не решение, я бы хотел, чтобы все эти текстовые поля txtQty имели один и тот же класс css. Затем вы можете использовать JQuery, чтобы найти все элементы с этим именем класса и пройтись по ним. Это намного лучше, чем перебирать всю форму и проверять, содержит ли идентификатор элемента «txtQty» в своем идентификаторе.

Другой способ - иметь скрытое поле, в котором будут все идентификаторы текстовых полей, которые вы хотите проверить. Вы бы добавили в это скрытое поле по мере добавления текстовых полей. Затем просто выделите скрытое поле в массиве идентификаторов и найдите только эти идентификаторы.

person David Basarab    schedule 14.05.2009

В итоге я использовал немного метода LongHorn, чтобы получить желаемые результаты. Используя собственный валидатор, я использовал его способность проверки на стороне клиента для вызова функции JS, которая проверяла отдельное текстовое поле в событии изменения текста.

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

person TheTXI    schedule 15.05.2009
comment
Всегда проверяйте на обоих концах. И сервер, и клиент. Чтобы защитить себя. Я также снова проверяю на уровне данных. - person David Basarab; 15.05.2009

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

<input type="textbox" class="validate-quantity validate-min" />

Таким образом, вы могли бы перебирать форму в поисках правил проверки вместо того, чтобы ориентироваться на конкретное текстовое поле.

person Mike Robinson    schedule 14.05.2009
comment
У меня действительно нет варианта в отношении идентификаторов, потому что страница aspx фактически имеет только один ItemTemplate, который отображается для каждого элемента в списке данных. Затем ASP.NET преобразует идентификатор txtQty во что-то вроде name=ctl00$content$dlCartDetails$ctl02$txtQty, чтобы идентификаторы на самом деле не конфликтовали. - person TheTXI; 14.05.2009
comment
Да, система идентификации .NET какое-то время сводила меня с ума. Вот почему легче ориентироваться на классы. Либо так, либо выполните javascript на уровне страницы и используйте txtQty.ClientID - person Mike Robinson; 14.05.2009

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

Вы можете либо добавить элемент управления валидацией, либо свернуть свой собственный.

person Josh    schedule 15.05.2009