2013-02-12 18 views
6

Dispongo di un elenco a discesa in cui è necessario memorizzare più dati di quelli consentiti dalla voce di elenco standard. L'approccio che ho preso è quello di aggiungere un attributo a ciascuno dei listini.Ottieni attributo da DropdownList SelectedItem

I monitor per le modifiche e può restituire il SelectedIndex, ma non sono sicuro di come recuperare l'attributo da lì, o se ci sono modi più semplici per raggiungere questo obiettivo.

Qualche idea?

+0

Asp.net al suo meglio ... Prova con ingressi nascosti . – gdoron

+0

Come hai aggiunto gli attributi? 'Item.Attributes.Add ("valore")'? – banana

+0

@banana - sì, ho appena passato i dati richiesti a un mathod, ho creato un nuovo ListItem e poi ho aggiunto un attributo. – dotnetnoob

risposta

8

Prova questa:

ddl.SelectedItem.Attributes["key"]; 
+0

Ti dà il valore corretto? – banana

+0

Sì e no. Tecnicamente la tua risposta è corretta, tuttavia c'è un problema tecnico nel fatto che sebbene il controllo della lista a discesa supporti gli attributi, non sembra persistere attraverso i postback. – dotnetnoob

+0

Non so perché non funzioni per te. Ho creato un'applicazione web, nel metodo di caricamento della pagina ho creato un 'ListItem' e l'ho aggiunto al ddl, e poi ho aggiunto' ddl.Items [0] .Attributes.Add ("data", "alcuni dati"); '. Ho aggiunto il pulsante e nell'evento click che ho scritto: 'string a = ddl.SelectedItem.Attributes [" data "];' - e 'a' ora contiene per me" alcuni dati ". – banana

2

Ho provato una volta prima e ho pensato che non potevo davvero usare l'attributo del sul attribuisce la DropDownList.

Quello che ho fatto è stata la seguente:

Creare una lista contenente un KeyValuePair. La chiave di KeyValuePair è lo stesso ID inserito nell'elemento DropDownList.

Il valore di KeyValuePair è il valore (oi valori) che si desidera conservare/connettere al proprio articolo.

È possibile memorizzare l'Elenco nel viewState e leggere i dati dopo aver selezionato un elemento nel DropDownList e trovare il KeyValuePair corretto utilizzando l'ID.

Così si può "memorizzare" i dati in questo modo:

var listKeyValuePair = new List<KeyValuePair<int, string>>(); 
    listKeyValuePair.Add(new KeyValuePair<int, string>(1, "data")); 
    ViewState["DataList"] = listKeyValuePair; 

e si possono ottenere i dati in questo modo:

var listKeyValuePair = (List<KeyValuePair<int, string>>)ViewState["DataList"]; 
    var dataILikeToHave = listKeyValuePair.Find(k => k.Key == Convert.ToInt16(dropDownlist.SelectedItem.Value)); 
+0

Sono in VB.NET. Ho trovato più facile usare Dictionary (Imports System.Collections.Generic). Memorizzazione: dict 'fioco come nuovo dizionario (Of Integer, String)' ' dict.Add (0, "DATA0")' ' dict.Add (1, "data1")' ' ViewState ("DataDict") = dict' Getting: 'Dim dict As New Dictionary (Of Integer, String) (CType (ViewState (" DataDict "), Dictionary (Of Integer, String)))' 'dict.Item (ddl.SelectedIndex) ' –