с использованием Asp.Net RangeValidator для Int64

Есть ли способ использовать RangeValidator для больших чисел (диапазон Int64)?


person nima    schedule 04.04.2011    source источник


Ответы (1)


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

HTML:

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
  <asp:RangeValidator ID="RangeValidator1" ControlToValidate="TextBox1"
runat="server" ErrorMessage="Help" SetFocusOnError="True" Type="Double"></asp:RangeValidator>

HTML Alt:

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

<asp:RangeValidator ID="RangeValidator1" ControlToValidate="TextBox1"
    runat="server" ErrorMessage="Help" SetFocusOnError="True" Type="Double"></asp:RangeValidator>
    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
      ControlToValidate="TextBox1" ErrorMessage="RegularExpressionValidator" 
      ValidationExpression="[1-9]\d*"></asp:RegularExpressionValidator>

Код позади:

protected void Page_Load(object sender, EventArgs e) {
      this.RangeValidator1.MaximumValue = Int64.MaxValue.ToString();
    }
person Community    schedule 04.04.2011
comment
Да, и я получаю это сообщение: значение 9223372036854775807 свойства MaximumValue объекта RangeValidator1 не может быть преобразовано в тип Integer - person nima; 04.04.2011
comment
Не могли бы вы показать мне больше вашего кода / html? Я установил быстрый пример проекта с текстовым полем и валидатором диапазона, и все заработало, как ожидалось. - person ; 04.04.2011
comment
Спасибо за то, что вы созрели. Ваш образец работает, потому что тип RangeValidator по умолчанию - String, поэтому вы можете назначить любую строку максимальному значению. Но проблема в том, что вы используете этот валидатор для проверки чисел, например 93 не будет проверять, потому что он больше, чем Int64.MaxValue (9223372036854775807) по строке. - person nima; 05.04.2011
comment
Измените значение типа на двойное. Это, очевидно, позволит использовать 64-битные числа с плавающей запятой, но не с уверенностью в ваших требованиях. Отредактированный код выше. - person ; 05.04.2011
comment
Спасибо за решение, но есть одна маленькая проблема. С двумя валидаторами, один из которых просит пользователя ввести число, а другой проверяет диапазон, если пользователь вводит нечисловой символ, сообщение будет отображаться далеко от текстового поля, потому что пространство сохраняется для первого валидатора. Есть ли способ уменьшить валидаро, когда у них нет сообщения? - person nima; 05.04.2011
comment
HTML-код, сгенерированный этими элементами управления, может быть стилизован с помощью CSS по своему усмотрению. Они генерируют элементы ‹span›, которые можно стилизовать с помощью CSS. Чтобы упростить CSS, добавьте CssClass = anyClassYouLike к каждому валидатору. - person ; 06.04.2011
comment
По умолчанию для допустимого валидатора задан скрытый стиль видимости, что означает, что элемент не отображается на экране, но макет остается в силе. Добавляя Display="Dynamic" к валидатору, он использует display:none, чтобы скрыть валидатор, когда он действителен. - person ajbeaven; 16.04.2012