InitialValue не устанавливается в RequiredFieldValidator DDL - PullRequest
0 голосов
/ 16 мая 2011

По какой-то причине начальное значение выпадающего списка не устанавливается. Вместо этого он всегда загружает случайное значение. Когда я смотрю на разметку, я вижу все элементы списка, включая один со значением -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 ]

1 голос
/ 16 мая 2011

Я попробовал ваш код, и оказалось, что в сгенерированном 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 на имя свойств вашего класса)

0 голосов
/ 18 мая 2011

Оказывается, это как-то связано с последовательностью загрузки элементов управления.Итак, добавление selectedindex в LoadGenders помогло.

protected void LoadGenders(object sender, EventArgs e)
    {
        if (IsPostBack) return;
        ((DropDownList)sender).Items.AddRange(Constants.GenderWithSelect);
        ((DropDownList) sender).SelectedIndex = 0;
    }
...