RegularExpression Validator не отображает сообщение об ошибке - PullRequest
1 голос
/ 18 марта 2010

У меня есть элемент проверки правильности регулярного выражения, инициализированный для проверки элемента управления текстовым полем. Я хочу, чтобы пользователи могли вводить значения в валюте США (12 115,85 долл. США или 1500,22 долл. США и т. Д.). Я нашел регулярное выражение на сайте regexlib, которое делает свое дело. Контроль валидации, кажется, работает, за исключением одной важной вещи. Если введены неверные данные, выводится текст проверки (красный «*» рядом с текстовым полем), но страница все равно будет отправлена, и сообщение об ошибке не появится ... Я подумал, что сообщение об ошибке должно отображаться и страница не будет отправлена, если элемент управления проверкой обнаружит недействительные данные. Разве это не автоматически с ASP .NET? Я много искал, как создавать проверочные элементы управления, но не нашел ничего, кроме того, что я уже делаю. Может кто-нибудь сказать мне, что я здесь делаю не так?

<asp:TextBox ID="txtActualCost" runat="server" Width="120px" CausesValidation="true" />
<asp:RegularExpressionValidator ID="regExValActualCost"
    ControlToValidate="txtActualCost"
    Text="*"
    ValidationExpression="^\$?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$"
    ErrorMessage="Please enter a valid currency value for 'Actual Cost'"
    Display="Dynamic"
    EnableClientScript="true"
    runat="server" />

Ответы [ 3 ]

4 голосов
/ 18 марта 2010

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

Есть ли какой-нибудь другой javascript на странице, который вызывает ошибку и вызывает сбой сценария проверки?

Используете ли вы группы проверки? Если это так, убедитесь, что кнопка отправки включена в эту группу проверки.

Имеет ли для кнопки "Отправить" свойство "CausesValidation" значение false?

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

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

Наконец, вы можете сами вызвать проверку страницы клиента, чтобы проверить, что происходит. Попробуйте разместить временную кнопку на странице с атрибутом OnClientClick, например:

<input  type="button" value="Fire Validation" name="foo" onClick="Page_ClientValidate();alert('Valid: '+Page_IsValid);return false;" />

Это запустит проверку проверки на стороне клиента и выдаст предупреждение с результатами проверки.

1 голос
/ 18 марта 2010

Это должно сработать очень хорошо. Сделайте следующее:

  1. Удалите CauseValidation="true" из вашего TextBox, так как он вам не нужен, и убедитесь, что это свойство не установлено в вашем Button.
  2. Убедитесь, что ваша кнопка не присоединена к группе валидации или, если это так, ваш валидатор должен быть настроен на ту же группу.
  3. Если вы хотите всплывающее окно, вам нужно будет добавить ValidationSummary и настроить его на показ всплывающего окна. Элемент управления ValidationSummary использует значение, сохраненное в свойстве валидатора ErrorMessage.
  4. Также обязательно сделайте if (Page.IsValid) в вашем обработчике кнопок, чтобы проверка на стороне сервера происходила, а также, если javascript отключен.

Кроме того, все это должно работать так, как вы ожидали.

0 голосов
/ 18 марта 2010

в вашем Submit_Click (или еще чем-нибудь), вам нужно проверить Page.IsValid. ASP.NET автоматически не предполагает, что у вас есть валидаторы на странице. Возможно, вам придется сначала вызвать Page.Validate ().

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