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