2010-09-29 3 views
10

Ok, sono uno sviluppatore web esperto ma a volte ASP.Net mi sta ingannando. Ho una pagina principale in asp.net. Quindi ho una pagina basata su quella pagina principale (home.aspx). Ora in home.aspx.cs voglio accedere all'asp: controlli del contenuto per aggiungere controlli a livello di programmazione.Access asp: contenuto dal codice

aspx assomiglia a questo:

<asp:Content ID="leftCol" ContentPlaceHolderID="cphLeftCol" Runat="Server"> 
    <asp:PlaceHolder ID="phLeftCol" runat="server"> 
    </asp:PlaceHolder> 
</asp:Content> 

mi aspetterei che posso fare riferimento "LeftCol" dal mio codice dietro. Ma è sconosciuto lì. Per il test ho aggiunto il mio segnaposto "phLeftCol". Posso fare riferimento a ciò senza problemi.

C'è qualcosa che non vedo?

risposta

17

Non è possibile accedere a asp: controllo dei contenuti direttamente dal codice sottostante. Un controllo del contenuto non viene aggiunto alla gerarchia di controllo in fase di runtime, quindi non è accessibile dal codice sottostante per aggiungere controlli a runtime. Per aggiungere controlli al runtime, devi aggiungere un altro controllo contenitore al controllo del contenuto e aggiungere i controlli (come hai fatto con il controllo segnaposto).

Vedere questo articolo MSDN per ulteriori informazioni.

+1

Quindi, la mia soluzione è migliore pratica. Che peccato. – newtogit

+0

Ci sono altri controlli contenitore forse più adatti alla tua situazione rispetto a un controllo segnaposto (dovresti davvero sapere di più su cosa stai facendo), ma il controllo dei contenuti non è un'opzione. –

+2

Pensa a ciascun oggetto ContentPlaceHolder (sulla pagina mastro) ea ciascun oggetto di contenuto (pagina di contenuto) corrispondente semplicemente agli estremi opposti di un collegamento che indica al sistema di rendering principale/contenuto dove e cosa incorporare nella pagina principale. Ogni ContentPlaceHolder nella pagina principale indica semplicemente dove inserire le cose definite in ciascun oggetto Contenuto corrispondente nella pagina di contenuto. Dato che questi oggetti servono solo da collegamento su dove/cosa incorporare, sono come meta-oggetti per il sistema di rendering Master/Contenuti, quindi non fanno mai parte della gerarchia di controllo. – Triynko

1

Non è possibile accedere al controllo "leftCol" dalla home page code-behind perché è titolare del contenuto di tale pagina e codice la home page non è a conoscenza del suo contenuto nel momento dell'iniezione ... è possibile solo controlli di accesso in quel contenuto. Contenuti iniezione va in asp.net dal basso verso l'alto, così il contenuto della home page, in questo caso tutto tra i tag <asp:Content ID="leftCol" ...> and </asp:Content>, va in placeHolder di una pagina master ...

applausi