InitialValue не устанавливается в RequiredFieldValidator DDL
По какой-то причине начальное значение выпадающего списка не устанавливается. Вместо этого всегда загружается случайное значение. Когда я смотрю на разметку, я вижу все элементы списка, включая элемент со значением -1. Я также попытался очистить кеш браузера и явно установить SelectedIndex/Value в коде на 0/"-1", но, похоже, не могу понять, что происходит. Любая идея?
Вот как я это делаю:
<asp:DropDownList ID="ddlGender" runat="server" CssClass="select_Box" OnPreRender="LoadGenders">
</asp:DropDownList>
<div class="error">
<asp:RequiredFieldValidator
ID="RequiredFieldValidatorGender"
Runat="server"
Enabled="true"
InitialValue="-1"
ControlToValidate="ddlGender"
SetFocusOnError="true"
Display="Dynamic">Gender Required</asp:RequiredFieldValidator>
</div>
Сгенерированный HTML:
<select name="pagecolumns_0$pagecontent_1$contentleftcol_0$ctl00$ddlGender" id="pagecolumns_0_pagecontent_1_contentleftcol_0_ctl00_ddlGender" class="select_Box">
<option value="-1">--Select Gender--</option>
<option selected="selected" value="M">Male</option>
<option value="F">Female</option></select>
как вы видите, это случайный выбор мужчины. Я также заметил, что в прошлый раз, когда я заполнял форму, я установил ее на Мале, прежде чем нажать "Отправить". Может быть, это кеширование выбора?
Вот.cs:
protected void LoadGenders(object sender, EventArgs e)
{
if (IsPostBack) return;
((DropDownList)sender).Items.AddRange(Constants.GenderWithSelect);
}
public static ListItem[] GenderWithSelect = (new[] { new ListItem("--Select Gender--", "-1") }).Concat(Gender).ToArray();
public static ListItem[] Gender = new[]
{
(new ListItem("Male","M")),
(new ListItem("Female","F"))
};
2 ответа
Оказывается, это связано с последовательностью загрузки элементов управления. Итак, добавление selectedindex в LoadGenders помогло.
protected void LoadGenders(object sender, EventArgs e)
{
if (IsPostBack) return;
((DropDownList)sender).Items.AddRange(Constants.GenderWithSelect);
((DropDownList) sender).SelectedIndex = 0;
}
Я попробовал ваш код, и оказалось, что сгенерированный html не имеет правильного поля, связанного со "значением" опций выбора.
То, что вы должны получить, должно иметь следующий формат:
<select name="ctl00$MainContent$ddlGender" id="MainContent_ddlGender" class="select_Box">
<option selected="selected" value="-1">not set</option>
<option value="0">0</option>
<option value="1">1</option>
</select>
Чтобы получить это, я должен был установить DataValueField DropDownList:
<asp:DropDownList ID="ddlGender" runat="server" CssClass="select_Box" OnPreRender="ddlGender_PreRender" DataValueField="Value" DataTextField="Text">
(Просто замените DataTextField и DataValueField на имя свойств вашего класса)