2012-03-21 26 views
6

Estoy tratando de agregar elementos a una lista desplegable utilizando una lista de elementos de lista, pero no está recogiendo el valor (solo el texto).¿Cómo se agregan programáticamente ListItems a DropDownList en ASP.NET?

El código está abajo (simplificado del código realidad estoy usando):

PositionDropDown.DataSource = GetPositionOptions(); 
    PositionDropDown.DataBind(); 


    private List<ListItem> GetPositionOptions() 
    { 
     List<ListItem> items = new List<ListItem>(); 
     items.Add(new ListItem("","")); 
     items.Add(new ListItem("Top (main)", "TOP")); 
     items.Add(new ListItem("Bottom (full width)", "BTM")); 
     items.Add(new ListItem("Bottom Left", "MIL")); 
     items.Add(new ListItem("Bottom Middle", "MID")); 
     return items; 
    } 

Sin embargo, el HTML representado carece de los valores especificados en el segundo parámetro del constructor ListItem:

<option value=""></option> 
<option value="Top (main)">Top (main)</option> 
<option value="Bottom (full width)">Bottom (full width)</option> 
<option value="Bottom Left">Bottom Left</option> 
<option value="Bottom Middle">Bottom Middle</option> 

¿Por qué no está utilizando el "valor" especificado y en su lugar simplemente repite el "nombre" al representar el HTML? ¿Qué estoy haciendo mal?

+0

ahhh, maldición ... verlo ahora, pero tú también lo has visto :-) –

Respuesta

9

Pruebe con este código. Está mezclando la adición de elementos manualmente con el enlace de datos.

private void SetPositionOptions() 
{ 
    PositionDropDown.Items.Add(new ListItem("","")); 
    PositionDropDown.Items.Add(new ListItem("Top (main)", "TOP")); 
    PositionDropDown.Items.Add(new ListItem("Bottom (full width)", "BTM")); 
    PositionDropDown.Items.Add(new ListItem("Bottom Left", "MIL")); 
    PositionDropDown.Items.Add(new ListItem("Bottom Middle", "MID")); 
} 

Yo diría que si desea mantener su código, ya que es usted debe agregar este 2 líneas

PositionDropDown.DataSource = GetPositionOptions(); 
PositionDropDown.DataTextField = "Text"; 
PositionDropDown.DataValueField = "Value"; 
PositionDropDown.DataBind(); 

Pero no tiene sentido, que no se supone para unirse ListItems.

+0

Gracias, pero la respuesta fue aún más simple - Olvidé especificar DataTextField y DataValueField – NickG

+0

¿Qué quieres decir con "¿No se supone que debes unir ListItems"? Puedes ligar a todo lo que pienso. – NickG

+0

Puede hacerlo, pero usar el primer enfoque que describí sería la forma natural de hacerlo, ya que la colección Elementos es una colección de ListItem. –

Cuestiones relacionadas