2010-09-29 13 views
10

Ok, soy un desarrollador web experimentado, pero a veces ASP.Net me está engañando. Tengo una página maestra en asp.net. Luego tengo una página basada en esa página maestra (home.aspx). Ahora en home.aspx.cs quiero acceder a los controles asp: content para agregar controles programáticamente.Acceso a asp: contenido del código detrás de

Aspx se ve así:

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

yo esperaría que puedo hacer referencia a "LeftCol" de mi código detrás. Pero es desconocido allí. Para probar agregué mi propio marcador de posición "phLeftCol". Puedo hacer referencia a eso sin problemas.

¿Hay algo que no vea?

Respuesta

17

No puede acceder al control asp: contenido directamente desde su código. Un control de contenido no se agrega a la jerarquía de control en tiempo de ejecución, por lo que no es accesible desde el código subyacente para agregar controles en el tiempo de ejecución. Para agregar controles en el tiempo de ejecución, debe agregar otro control de contenedor al control de contenido y agregar los controles a eso (como lo hizo con el control de marcador de posición).

Consulte este artículo MSDN para obtener más información.

+1

lo tanto, mi solución es mejor práctica. Qué lástima. – newtogit

+0

Existen otros controles de contenedor que pueden ser más adecuados para su situación que un control de marcador de posición (realmente tendría que saber más sobre lo que está haciendo), pero el control de contenido no es una opción. –

+2

Piense en cada ContentPlaceHolder (en la página maestra) y en cada objeto coincidente de contenido (página de contenido) simplemente como puntos finales opuestos de un enlace que indica dónde y qué debe incrustar el sistema de representación de contenido/maestro en la página maestra. Cada ContentPlaceHolder en la página maestra simplemente indica dónde insertar las cosas definidas en cada objeto de contenido correspondiente en la página de contenido. Dado que estos objetos sirven solo como un enlace sobre dónde/qué incrustar, son como metaobjetos para el sistema de representación Maestro/Contenido, por lo que nunca forman parte de la jerarquía de control. – Triynko

1

No puede acceder al control "leftCol" desde el código de la página de inicio porque es el titular del contenido de esa página, y el código de su página de inicio desconoce su contenido en el momento de la inyección ... solo puede controles de acceso en ese contenido. inyectar un contenido va en asp.net desde abajo hacia arriba, por lo que el contenido de su página principal, en este caso, todo lo que entre las etiquetas <asp:Content ID="leftCol" ...> and </asp:Content>, va en marcador de posición de una página principal ...

aplausos

Cuestiones relacionadas