Есть 3 основных момента, которые необходимо понимать при работе с элементами DropDownList.
(Использование слова «сравнить» ниже - любое логическое сравнение, не относящееся к валидатору.)
В DropDownList вы обычно будете сравнивать три вещи.
Выбранный индекс - это индекс на основе 0, на который можно ссылаться в коде.
Выбранное значение - это целое число, которое не должно начинаться с 0 или находиться в каком-либо определенном порядке. Вы часто будете видеть это значение, представляющее идентификатор базы данных.
Выбранный элемент - обычно это видимый текст строки в списке.
Использовать 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" />