Несколько ASP.NET Выпадающим спискам присваивается одно и то же значение

#asp.net #drop-down-menu

#asp.net #выпадающее меню

Вопрос:

У меня есть 6 выпадающих списков (с одинаковыми параметрами), и я вручную настраиваю их в своем codebehind. Все шесть должны иметь разные значения. Когда я регистрирую значения, на которые я их устанавливаю, я получаю правильные предполагаемые значения, которые должны быть установлены. Однако при рендеринге страницы всем шести из них присваивается одно и то же долбаное значение.

Я попытался установить значения со всеми следующими:

 // set index, find by text

dd1.SelectedIndex = dd1.Items.IndexOf(dd1.Items.FindByText(val1));

// set with selected value

dd2.SelectedValue = val2;

// set index, find by value

dd3.SelectedIndex = dd3.Items.IndexOf(dd3.Items.FindByValue(val3));

// set list item, selected = true

((ListItem)dd4.Items.FindByValue(val4)).Selected = true;
  

Набор параметров выпадающих списков генерируется до того, как я пытаюсь их установить:

 foreach (Station st in stations) {
ListItem li = new ListItem() { Text = st.fromto, Value = st.fromto};
dd1.Items.Add(li); 
dd2.Items.Add(li); 
dd3.Items.Add(li); 
dd4.Items.Add(li); 
dd5.Items.Add(li); 
dd6.Items.Add(li); 
}
  

Затем я просматриваю базу данных, чтобы узнать, существуют ли какие-либо значения для определенного ссылочного идентификатора в моем приложении. Если это так, это указывает на то, что мне нужно установить один или несколько (до 6) выпадающих списков:

 var existingStations = db.LOGOPS_STATIONs.Where(x => x.XREF_LOGOP_MAIN_ID == logopRefId);
    if (existingStations.Count() > 0) {
        int i = 1;
        foreach (LOGOPS_STATION s in existingStations) {
            if (i < 7) {
                string text= s.FROM_STATION;

                    if (i == 1) dd1.SelectedIndex = dd1.Items.IndexOf(dd1.Items.FindByText(text));
                     // for the heck of it, set the next one manually...                            
                     else if (i == 2) dd2.SelectedIndex = 2;
                             // try and set one with forcing select
                     else if (i == 3) ((ListItem)dd3.Items.FindByText(text)).Selected = true;
                             // good ol normal
                     else if (i == 4) dd4.SelectedValue = text;
                    ... and so on ...

            }
        }
    }
  

Итак, все выпадающие списки заполнены (когда я захожу в codebehind, они полностью заполнены). И когда я регистрирую фактические значения, когда они устанавливаются, им присваивается значение, как и ожидалось. Однако, когда страница загружается, для всех них устанавливается одно и то же значение

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

 dd1.SelectedIndex = 2;

dd2.SelectedIndex = 8;
  

Как ни странно, это тоже не работает. На самом деле, когда установка SelectedIndex на уникальный элемент управления с уникальным идентификатором не устанавливает элемент?

Комментарии:

1. Во время какого события вы пытаетесь установить значения? Можем ли мы увидеть часть соответствующего кода с вашей страницы aspx? На самом ли деле все они устанавливаются на последнее значение, чтобы попытаться установить одно из них, или все они устанавливаются на значение по умолчанию или какое-то другое значение?

2. Вероятно, нам нужна более подробная информация для работы. Например, где вы выполняете эти операции «SelectedIndex =»? Page_Init? Page_Load? Конструктор? Проблема возникает при первом посещении страницы, при обратной передаче или при обоих? Где в коде вы определяете списки выбора и их содержимое / параметры? На странице ASPX или в codebehind? Если последнее, то где / когда?

3. Похоже, вы устанавливаете значение до привязки списка к источнику данных. Можете ли вы включить код, который показывает, как элементы управления привязаны к данным, и, возможно, некоторые подробности об источнике данных.

4. Какой элемент выбирается? Последний элемент, добавленный в выпадающие списки, или элемент, который вы явно выбираете последним в своем коде? Нам действительно нужна дополнительная информация о проблеме.

5. #1 —> если ! IsPostBack, затем я запускаю метод, который сначала очищает все выпадающие списки, затем повторно заполняет, затем, если данные присутствуют, присваивает выпадающим спискам эти значения

Ответ №1:

Мне пришлось создать отдельный элемент списка для каждого выпадающего списка вместо того, чтобы все они использовали один и тот же li в цикле foreach. И затем, сделав еще один шаг, пришлось установить Selected = false в конструкторе ListItem

Я предполагал, что вы могли бы «повторно использовать» код для каждого экземпляра выпадающего списка, но для каждого выпадающего списка требовался свой собственный уникальный ListItem

Возможно, есть способ получше, но это решение, похоже, решило проблему