2015-12-17 14 views
7

Sto cercando di ottenere tutti gli elenchi a discesa sulla mia pagina e in ciascuno di essi il testo/il valore dell'elemento selezionato. Ma mi sembra che manchi qualcosa.Ottieni l'opzione selezionata per tutti gli elenchi DropDown

foreach (DropDownList dr in this.Page.Form.Controls.OfType<DropDownList>()) { 
    foreach (ListItem li in dr.Items) { 
      if (li.Selected) { 
      //put the selected items value/text into something. 
     } 
    } 
} 

Qualche idea per farlo?

Modifica: per rendere più chiaro. Ho una quantità casuale di DropDownList, dove posso selezionare 1 opzione pr Dropdownlist. Quando premo un pulsante, ho bisogno di ottenere le informazioni da ciò che ho selezionato in ogni DropDownList. (Non c'è ID sulle DropDownLists, che c'è un numero casuale).

+3

Qual è il problema che stai affrontando? Eventuali eccezioni? – Irshad

+1

Sto diventando non selezionato, anche se ho selezionato un listino nel mio menu a discesa. – user3314032

+1

@ user3314032 - Vuoi dire che stai creando questi menu a discesa in modo dinamico? Se non mostra il codice di markup del menu a discesa. –

risposta

0
protected void Button1_Click(object sender, EventArgs e) 
    { 
     List<DropDownList> lst = new List<DropDownList>(); 
     GetDropDownControls(GetListOfControlCollection(this.Form.Controls), ref lst); 

     foreach (DropDownList item in lst) 
     { 
      var selectedValue = item.SelectedValue; 
      //to do something with value 
     } 

    } 

     void GetDropDownControls(List<Control> controls, ref List<DropDownList> lst) 
    { 
     foreach (Control item in controls) 
     { 
      if (item.Controls.Count == 0 && item is DropDownList) 
       lst.Add((DropDownList)item); 
      else 
       if (item.Controls.Count > 0) 
        GetDropDownControls(GetListOfControlCollection(item.Controls), ref lst); 
     } 
    } 

    List<Control> GetListOfControlCollection(ControlCollection controls) 
    { 
     List<Control> result = new List<Control>(); 
     foreach (Control item in controls) 
     { 
      result.Add(item); 
     } 
     return result; 
    } 
+3

Sebbene questa sia probabilmente una buona soluzione, prova a spiegare cosa stai facendo e perché questa * è * la soluzione giusta per chi sta chiedendo. –

Problemi correlati