Валидатор для выпадающего списка в asp.net - PullRequest
5 голосов
/ 23 февраля 2011

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

<asp:DropDownList ID="ddlOne" runat="server"  CssClass="dropDrownClass" Width="80%">

На стороне сервера после загрузки выпадающего меню добавляю

- Пожалуйста, выберите -

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

<asp:CompareValidator ID="CompareValidator1" runat="server" 
                          ControlToValidate="ddlOne" ValueToCompare="-- Please Select --" Operator="Equal"  Type="String"   ErrorMessage="CompareValidator"></asp:CompareValidator>
                        <asp:ValidatorCalloutExtender ID="ValidatorCalloutExtender1" TargetControlID="CompareValidator1" runat="server">
                        </asp:ValidatorCalloutExtender>

Но он показывает мне сообщение об ошибке всякий раз, когда я выбираю что-либо в выпадающем списке и когда я изменил валидатор на

<asp:CompareValidator ID="CompareValidator1" runat="server" 
                          ControlToValidate="ddlOne" ValueToCompare="0" Operator="Equal"  Type="Integer"  ErrorMessage="CompareValidator"></asp:CompareValidator>

Я получаю сообщение об ошибке при каждом выборе, кроме первого, который - пожалуйста, выберите -.

Пожалуйста, дайте мне знать, как проверить первый элемент раскрывающегося списка

ВЫПУСК 2

Я получаю двойное сообщение, одно из выпадающего списка [которое показывает ошибку "Carson63000" красным] и одно в виде всплывающего окна [вызов валидатора]. То же сообщение Я хочу, чтобы только вызов валидатора отображал сообщение.

Ответы [ 3 ]

12 голосов
/ 23 февраля 2011

Ваш валидатор будет сравнивать значение выбранного элемента раскрывающегося списка, а не текст .Самым простым способом часто является пустая строка для значения элемента «Пожалуйста, выберите», непустое значение для других элементов, а затем просто используйте RequiredFieldValidator.

Кроме того,CompareValidator с ValueToCompare="-- Please Select --" и Operator="Equal" означает: проверьте значение раскрывающегося списка и убедитесь, что оно равно «- Пожалуйста, выберите -»;если нет, отобразите ошибку.Что является полной противоположностью того, что вам нужно - вы бы хотели изменить оператор на Operator="NotEqual", если вы хотите использовать подход CompareValidator.

1 голос
/ 28 февраля 2018

Изменить Оператор значение:

<asp:CompareValidator ID="CompareValidator1" runat="server" 
     ControlToValidate="ddlOne" ValueToCompare="0" Operator="NotEqual"
     Type="Integer" ErrorMessage="CompareValidator" />
0 голосов
/ 02 августа 2018

Есть 3 основных момента, которые необходимо понимать при работе с элементами DropDownList. (Использование слова «сравнить» ниже - любое логическое сравнение, не относящееся к валидатору.)

В DropDownList вы обычно будете сравнивать три вещи.

  1. Выбранный индекс - это индекс на основе 0, на который можно ссылаться в коде.

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

  3. Выбранный элемент - обычно это видимый текст строки в списке.

Использовать ValueToCompare в Validator сложно, потому что вы сравниваете Выбранное значение, которое отличается от Индекса, но иногда имеет одинаковых значений. То, что вы увидите, зависит от того, как вы создаете список данных для выпадающего списка.

  • Если вы используете тип List и привязываете его к DropDown, вы можете установить значение DropDown в значение индекса индекса.

  • Если вы получили список из запроса к БД, вы можете установить в качестве значения идентификатор базы данных каждого элемента.

  • Если вы возьмете пустой DropDown и заполните его с помощью DropDownList.Items.Add , вы можете получить результат, отличный от:
  • Если вы взяли существующий список и добавили элементы через DropDownList.Items.Insert , может произойти множество вещей.

Например, посмотрите на следующий код:

protected void DetailsView_New_Form_DataBound (object sender, EventArgs e)
        {
            DropDownList webform_type = (DropDownList)DetailsView_New_Form.FindControl("DropDownList_DV_New_webform_type");
            webform_type.Items.Insert(0, new ListItem("--Select--", "0"));
        } 

Несмотря на то, что я вставляю «--Select -» в индекс 0 раскрывающегося списка, я устанавливаю его значение в строковое значение «0», а не в целое значение 0. Это фактически не вставляет однако при индексе 0 он вставляется в -1. Единственный способ сравнения работает в моем сценарии, если ValueToCompare = "-1". Это значение будет равным 0, если в выпадающем списке первым будет «Выбрать». Синус, я добавляю его в уже связанный выпадающий список, 0 становится -1. Поэтому этот валидатор работает:

<asp:RequiredFieldValidator runat="server" ID="webform_type_Validator" CssClass="validator"
ErrorMessage=" *Required!" ControlToValidate="DropDownList_DV_New_webform_type"
InitialValue="0" SetFocusOnError="True" Display="Dynamic" 
ValidationGroup="InsertForm" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...