2010-07-21 30 views
7

Tengo una página WebForms que tiene dos controles DropDownList que contienen un rango de temperaturas de 60-80 grados, uno para calentar el otro para enfriar. Se declaran en el .aspx como:Establecer SelectedValue para uno DropDownList también actualiza SelectedValue para otro DropDownLIst

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

Los valores para cada lista están pobladas en el código subyacente usando:

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

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

Cuando intento para establecer el valor seleccionado para cada DropDownList utilizando el valores en un objeto que contiene datos cargados desde la base de datos usando:

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

el SelectedValue para ambas listas se fija primero al valor en myHome.avgHeatingTemp, a continuación, al valor en myHome.av gCoolingTemp. No tengo idea de por qué está sucediendo esto o cómo solucionarlo.

Heres cuáles son los valores para cada variable después de cada paso del proceso de creación de los 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 

Respuesta

7

va a enlazar aquellos a la misma instancia del objeto ListItem. Entonces, cuando seleccionas uno, también seleccionas el otro. Cuando rellene las listas desplegables, intente crear dos instancias de 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); 
} 

Esto sucede porque el ListItem en sí tiene una propiedad Selected. Cuando lo configura para uno, lo configura para el otro también.

+0

+1 Me pegó. – womp

+0

Gracias, eso funcionó. Ese también fue mi primer pensamiento sobre el problema y pensé que lo había intentado y que no había funcionado, pero ... Lo atribuiré a que no hay suficiente cafeína y la disminución de las habilidades de WebForm debido al gasto aumentar la cantidad de tiempo trabajando con MVC (que no considero que sea algo malo). – Hamman359

+0

Ciertamente no. Esta situación es definitivamente poco intuitiva. – EndangeredMassa

Cuestiones relacionadas