ASP.NET RangeValidator ведет себя странно

Для атрибута type установлено значение string, минимальное значение = 0, максимальное значение = 100.

Я хочу убедиться, что введенные данные не превысят длину столбца, определенную в базе данных.

Теперь, когда я тестирую его, он всегда отображает сообщение об ошибке, даже если я ввел одну или две буквы!


person Mazen Elkashef    schedule 13.04.2011    source источник
comment
сделайте это с помощью регулярного выражения или свойства MaxLength для элемента управления, чтобы пользователь не превышал лимит.   -  person Anyname Donotcare    schedule 13.04.2011
comment
@just_name .. Оба решения хороши, но я выбрал вариант с регулярным выражением, чтобы предоставить пользователю обратную связь .. Спасибо :)   -  person Mazen Elkashef    schedule 14.04.2011


Ответы (2)


Для этого вы должны использовать RegularExpressionValidator. RangeValidators не предназначены для длин строк. Установите ValidationExpression на что-то вроде .?, или вы можете сузить его до чего-то вроде \S? или \w? или чего-то еще, если хотите.

Кроме того, если вы работаете с TextBox, который не находится в многострочном режиме (и нет причин, по которым это было бы, если максимум составляет один символ), вы можете просто установить MaxLength="1" в элементе управления, и вам вообще не понадобится валидатор.

EDIT: Если вы хотите указать максимальную длину больше единицы в многострочном текстовом поле, вы можете использовать RegularExpressionValidator, как описано выше, но установите ValidationExpression=".{0,100}" для максимальной длины 100. Дополнительная информация о квантификаторах регулярных выражений доступна здесь.

Если у вас есть однострочный TextBox, просто установите для его атрибута MaxLength желаемый максимум, и он не допустит ничего длиннее этого; валидатор не требуется.

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

person Justin Morgan    schedule 13.04.2011
comment
@Justin Morgan .. Хорошо, теперь я понимаю, что RangeValidator не поможет мне с длиной строки. То, что я хочу сделать, это что-то вроде поля комментариев stackoverflow.. оно ограничивает максимальную длину комментария 600 (любой неанглийский символ, такой как unicode, по-прежнему считается одним, а пробелы считаются символом), и он проверяет это на как на стороне клиента, так и на стороне сервера. Как вы думаете, я могу сделать то же самое? - person Mazen Elkashef; 13.04.2011
comment
@Justin Morgan .. Что касается вашего редактирования, у меня есть два требования к однострочному текстовому полю не более 100 символов и к многострочному текстовому полю не более 500 символов. - person Mazen Elkashef; 13.04.2011
comment
@Justin Morgan .. MaxLength будет работать, но он не будет взаимодействовать с пользователем, чтобы объяснить, почему он, например, не может ввести более 10 символов .. Я попробовал решение Regex, оно сработало как шарм (Y) Спасибо. знак равно - person Mazen Elkashef; 14.04.2011
comment
@Justin Morgan .. Извините, я знаю, что это немного не по теме вопроса, но я понял, что вы любите регулярные выражения, поэтому я надеялся рассказать мне, как ограничить два отдельных случая: 1. Нет пробелов и длина может быть от 0 до 50 2.без пробелов ни в начале, ни в конце, а длина в диапазоне от 0 до 50.. Спасибо =D - person Mazen Elkashef; 14.04.2011
comment
@IKashef - Конечно, я думаю, что знаю, что вы ищете. Можете ли вы опубликовать это как вопрос и разместить ссылку на него здесь? - person Justin Morgan; 14.04.2011
comment
Спасибо =) stackoverflow.com/questions/5676533/ - person Mazen Elkashef; 15.04.2011

Задайте для свойства «MaxLength» элемента управления значение 1. Это страница MSDN описывает свойство и его использование.

RangeValidator проверяет значение ввода, а не длину, поэтому вы ограничиваете допустимые входные данные до {0, 1} с помощью своего валидатора.

person Dan    schedule 13.04.2011
comment
. Я хочу, чтобы длина входной строки была от 0 до 100. Как поможет установка MaxLength в 1? - person Mazen Elkashef; 13.04.2011
comment
@IKashef - я заявил, что установил свойство MaxLength равным единице, потому что вы заявили, что хотите, чтобы длина поля была минимальной = 0, а максимальное значение = 1. Если вы хотите, чтобы MaxLength было равно 100, установите для него значение 100. - person Dan; 13.04.2011
comment
. Вы правы, я опечатался в максимальном значении, я имел в виду 100 .. в любом случае, оба ответа верны, но ответ Джастина Моргана более точен, так как вам нужно добавить точку к выражению .. {0, 1} не будет работать .. + 1 Спасибо за ваше время и хорошие решения :) - person Mazen Elkashef; 14.04.2011