2010-07-21 3 views
7

У меня есть страница WebForms, на которой есть два элемента управления DropDownList, которые содержат диапазон температур от 60 до 80 градусов, один для нагрева другого для охлаждения. Они объявлены в .aspx как:Настройка SelectedValue для одного DropDownList также обновляет SelectedValue для другого DropDownLIst

<asp:DropDownList ID="heating" runat="server" /> 
<asp:DropDownList ID="cooling" runat="server" /> 

Значения для каждого списка заполняется в отделенном коде с помощью:

for(int i = 60; i <= 80; i++) 
{ 
    var listItem = new ListItem(i + " degrees", i.ToString()); 

    heating.Items.Add(listItem); 
    cooling.Items.Add(listItem); 
} 

Когда я пытаюсь установить выбранное значение для каждого DropDownList с помощью значения в объект, содержащий данные, загруженные из базы данных с помощью:

heating.SelectedValue = myHome.avgHeatingTemp.ToString(); 
cooling.SelectedValue = myHome.avgCoolingTemp.ToString(); 

SelectedValue для обоих списках устанавливается первым значением в myHome.avgHeatingTemp, то к значению в myHome.av gCoolingTemp. Я понятия не имею, почему это происходит или как это исправить.

Heres то, что значения для каждого переменного после каждого шага процесса установки SelectedValues:

Initial State 
    heating.SelectedValue: 60 
    cooling.SelectedValue: 60 
    myHome.avgHeatingTemp: 72 
    myHome.avgCoolingTemp: 75 

After setting heating.SelectedValue 
    heating.SelectedValue: 72 
    cooling.SelectedValue: 72 
    myHome.avgHeatingTemp: 72 
    myHome.avgCoolingTemp: 75 

After setting cooling.SelectedValue 
    heating.SelectedValue: 75 
    cooling.SelectedValue: 75 
    myHome.avgHeatingTemp: 72 
    myHome.avgCoolingTemp: 75 

ответ

7

Вы связывание тех же экземпляр объекта ListItem. Таким образом, когда вы выбираете один, он также выбирает другой. Когда вы заполняете dropdownlists, попробуйте создать два экземпляра ListItem.

for(int i = 60; i <= 80; i++) 
{ 
    var listItem1 = new ListItem(i + " degrees", i.ToString()); 
    var listItem2 = new ListItem(i + " degrees", i.ToString()); 

    heating.Items.Add(listItem1); 
    cooling.Items.Add(listItem2); 
} 

Это происходит потому, что сама ListItem имеет Selected свойство. Когда вы устанавливаете его для одного, вы также устанавливаете его для другого.

+0

+1 Ударьте меня в это. – womp

+0

Спасибо, что сработало. Это была моя первая мысль об этой проблеме, и я подумал, что пробовал ее, и что она не сработала, но ... Я просто объясню это недостаточным количеством кофеина и уменьшающими навыки WebForm из-за расходов увеличивая время работы с MVC (что я не считаю плохим). – Hamman359

+0

Конечно нет. Эта ситуация определенно неинтуитивная. – EndangeredMassa

Смежные вопросы