ciao,
il problema sta nel fatto che mettere un tag lato server vuol dire che l'html generato è quello di asp.net, che per i tag html normali li renderizza come stanno, mentre per gli oggetti asp (quelli che cominciano con "<asp:" per intenderci) viene generato l'html corrispondente.
In parole povere il tag runat="server" viene elaborato dal runtime di asp.net e generato l'html corrispondente per darlo in pasto al browser (che appunto conosce solo html e js).
Per gestire questo, quando renderizza la pagina, il runtime cambia gli id dei controlli a piacimento, perche' tanto verranno gestiti lato server e quindi con i nomi che ti trovi nell'intellisense.
Questo si capisce meglio quando hai un repeater, dove definisci degli oggetti lato server e poi lui li renderizza sul browser in automatico, qui se non cambiasse i nomi sarebbe il disastro perche' avresti piu' controlli con lo stesso nome e quindi non piu' identificabili, nonche' un HTML non corretto.
Tante parole per darti una pagina di soluzione che avevo postato tempo fa anche nel mio blog:
http://blogs.dotnethell.it/freeteo/Post_7505.aspx
la pagina di esempio per farti capire cosa puoi fare per accedere da javascript al controllo che ti interessa:
come vedi il trucchetto sta proprio nell'utilizzare un codice asp.net (quidi lato server) dentro a del codice javascript, in particolare il punto:
("<%= divserver.ClientID %>");
insieme ti trovi il duale lato client che ovviamente funziona come ti aspetti, ma pero' da codice c# o vb.net non riesci ad accederci giustamente...
Prova a darci un'occhiata
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo