Ciao, sto realizzando una procedura interna ed ho problemi proprio nella parte più importante: un wizard per creare un certo tipo di documenti.

Nella prima pagina del wizard l'utente imposta le opzioni con cui verrà generato il documento:
screenShot della pagina 1

Nella seconda pagina i controlli vengono creati dinamicamente in base alle opzioni scelte nella prima, questo per permettere all'utente di sovrascrivere le voci proposte dalla procedura:
screenShot della pagina 2
(le righe in azzurrino coi checkBox spuntati sono quelle che l'utente stà personalizzando)

Nella pagina finale (la terza) dovrei memorizzare il tutto ma mi sono accorto che asp.net non mi vede i checkox e le textbox che ho aggiunto dinamicamente

Questa è la funzioncina rozza con cui genero una riga per la personalizzazione:
codice:
    Protected Function CrateCustomizationRow(ByVal wich As String, ByVal Qt As String, ByVal PN As String, ByVal description As String) As String
        ' Crea riga di personalizzazione
        Dim cRow As String
        cRow += "    <tr id='tr" & wich & "'>"
        cRow += "        <td style='width: 21px'>"
        cRow += "           <input type='checkbox' name='chkCustomize" & wich & "' onclick='switchCustomizationRow(&quot;" & wich & "&quot;)'>"
        cRow += "        </td>"
        cRow += "        <td style='width: 24px' align='center'>"
        cRow += "           <div id='div" & wich & "LblQt'>" & Qt & "</div>"
        cRow += "           <div id='div" & wich & "TBQt' style='display = none'><input type='textbox' name='TBQt" & wich & "' value='" & Qt & "' size='2' class='userInput'></div>"
        cRow += "        </td>"
        cRow += "        <td style='width: 79px'>"
        cRow += "           <div id='div" & wich & "LblPn'>" & PN & "</div>"
        cRow += "           <div id='div" & wich & "TBPn' style='display = none'><input type='textbox' name='TBPn" & wich & "' value='" & PN & "' size='13' class='userInput'></div>"
        cRow += "        </td>"
        cRow += "        <td style='width: 479px'>"
        cRow += "           <div id='div" & wich & "LblDescription'>" & description & "</div>"
        cRow += "           <div id='div" & wich & "TBDescription' style='display = none'><input type='textbox' name='TBDescription" & wich & "' value='" & description & "' size='93' class='userInput'></div>"
        cRow += "        </td>"
        cRow += "        <td style='width: 18px' align='center'>"
        cRow += "           <div id='div" & wich & "LnkSelectorInactive'>[img]images/search-blue-off.gif[/img]</div>"
        cRow += "           <div id='div" & wich & "LnkSelector' style='display = none'>[img]images/search-blue.gif[/img]</div>"
        cRow += "        </td>"
        cRow += "    </tr>"
        Return cRow
    End Function 'Crea riga di personalizzazione
Credendo che il problema fosse che creo controlli 'html standard' invece di controlli asp.net ho provato a seguire un tutorial in cui si consigliava di creare i controlli in questa maniera:
codice:
    Dim codeToParse As String = "<asp:Label runat='server' id='lblTest" & wich & "' Text='Sono la lblTest" & wich & "' />"
    Dim testControl As Control = ParseControl(codeToParse)
    TestPlaceHolder.Controls.Add(testControl)
Il controllo viene creato (a video lo vedo) ma se provo a leggerne il valore mi dice ancora che non esiste!

Messaggio di errore del compilatore: BC30451: Nome 'lblTestMotor ' non dichiarato.
(dove 'Motor' è un suffisso che appendo io dinamicamente in fase di creazione del controllo)


Riassumendo: come si crea dinamicamente un controllo che prenda il nome (ID) da una variabile in modo che se ne possa, in seguito, leggerne il valore inserito da un utente?

Grazie e scusate, sono migrato ad asp.net da pochissimo tempo.