Definiamo una pagina aspx con un controllo DropDownList al quale aggiungiamo un dei ListItem da codice.
Vogliamo creare i ListItem con un attributo per memorizzare una informazione che ci interessa:
ListItem item;
item = new ListItem("Valore 1", "V1");
item.Attributes.Add("MyCustomAttribute", "CUSTOM 1");
this.MyDropDownList.Items.Add(item);
item = new ListItem("Valore 2", "V2");
item.Attributes.Add("MyCustomAttribute", "CUSTOM 2");
this.MyDropDownList.Items.Add(item);
Mettiamo in esecuzione e ci accorgiamo che l'attributo viene perso al primo postback.
Sembra si tratti di un un baco o giù di lì, in quanto l'oggetto DropDownList non salva nel ViewState la collezione degli attributes dei ListItem contenuti.
L'alternativa potrebbe essere di ri-definire il proprio DropDownList che si preoccupi di salvere e poi rileggere quelle informazioni.
Ecco un paio di esempi/post di come fare:
http://weblogs.asp.net/fmarguerie/archive/2003/02/27/3103.aspx
http://aspnet.4guysfromrolla.com/articles/091405-1.aspx
Da quardare anche nella KB di Microsoft il suggerimento seguente:
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q309338