2012-03-21 11 views
6

Sto tentando di aggiungere elementi a un elenco a discesa utilizzando un elenco di ListItems, ma non sta rilevando il valore (solo il testo).Come si aggiunge ListItems a DropDownList in ASP.NET al livello di programmazione?

Il codice è qui sotto (semplificato dal codice In realtà sto 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; 
    } 

Tuttavia il rendering HTML manca i valori specificati nel 2 ° parametro del costruttore 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> 

Perché non utilizza il "valore" specificato e invece si ripete semplicemente il "nome" durante il rendering dell'HTML? Che cosa sto facendo di sbagliato?

+0

ahhh, dannazione ... vedere ora, ma hai visto te troppo :-) –

risposta

9

Provare con questo codice. Stai mescolando manualmente l'aggiunta di articoli con l'associazione dei dati.

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")); 
} 

direi che se si desidera mantenere il vostro codice come è si dovrebbe aggiungere questo 2 linee

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

Ma non hanno senso, non dovresti legare ListItems.

+0

Grazie, ma la risposta è stata ancora più semplice - avevo dimenticato di specificare il DataTextField e DataValueField – NickG

+0

Che cosa si intende per "non dovresti legare ListItems"? Puoi legare a qualsiasi cosa io pensi. – NickG

+0

Puoi farlo, ma usare il primo approccio che ho descritto sarebbe il modo naturale di andare poiché la collezione di articoli è una raccolta di ListItem. –

Problemi correlati