Io cambierei completamente approccio, stai usando tecniche stile "ASP classic"! Fin dalla prima versione di ASP.NET l'obiettivo principale dei progettisti fu quello di separare la pagina HTML dal codice lato server. Il problema nel tuo caso è che una inclusione come <%= indice %> non funziona all'interno di un controllo ASP.NET (o di un qualsiasi altro elemento che ha l'attributo runat="server"). Ecco come farei io:
codice:<div id="elenco" class="col300" runat="server"> </div> 'nel codice VB associato alla pagina For Indice = 1 To TotIndice Dim c As New test With c .ID = "Test1" .IdT = 1 'ecc End With elenco.Controls.Add(c) Next