ASP.NET Свойство SelectedIndex одинаково во всех HtmlSelect на странице - PullRequest
1 голос
/ 09 июля 2010

У меня есть HtmlSelect (DropDownList a'la asp.net) с идентификаторами, такими как Select1, Select2, ..., Select13.Я создаю статический список элементов:

for (int i = 0; i < tab.Length; i++)
  _listItems[i] = (new ListItem { Text = tab[0, i], Value = tab[1, i], Selected=false });

, затем назначаю этот список для каждого элемента управления HtmlSelect и назначаю новое свойство SelectedIndex:

var HtmlSelectControl = ((HtmlSelect)this.FindControl(String.Format("Select{0}", controlNumber)));

HtmlSelectControl.Items.AddRange(_listItems);
HtmlSelectControl.SelectedIndex = controlNumber - 1;

Проблема заключается в том,Свойство SelectedIndex элемента управления Select2 (например, = 1), элемент управления Select1 имеет то же свойство SelectedIndex (которое имеет этот индекс = 0).Почему?

1 Ответ

0 голосов
/ 09 июля 2010

Вы привязываете все элементы управления select к одному и тому же списку элементов.Это элементы, которые вы устанавливаете как выбранные при установке SelectedIndex в элементе управления select.Поскольку все элементы управления select имеют ссылки на один и тот же список элементов, установка свойства SelectedIndex для одного из них устанавливает его для всех остальных.

Сравните следующие два фрагмента.Первый - тот же, что и у вас, где вы привязываетесь к одному и тому же списку:

        var _listItems = new List<ListItem>{ new ListItem("Item1"), new ListItem("Item2"), new ListItem("Item3")};
        for (int controlNumber = 1; controlNumber < 4; controlNumber++) {
            var HtmlSelectControl = ((HtmlSelect) this.FindControl(String.Format("Select{0}", controlNumber)));
            HtmlSelectControl.Items.AddRange(_listItems.ToArray());
            HtmlSelectControl.SelectedIndex = controlNumber - 1;
        }

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

        for (int controlNumber = 1; controlNumber < 4; controlNumber++) {
            var _listItems = new List<ListItem>{ new ListItem("Item1"), new ListItem("Item2"), new ListItem("Item3")};
            var HtmlSelectControl = ((HtmlSelect) this.FindControl(String.Format("Select{0}", controlNumber)));
            HtmlSelectControl.Items.AddRange(_listItems.ToArray());
            HtmlSelectControl.SelectedIndex = controlNumber - 1;
        }
...