2010-04-27 9 views
8

He visto dos sugerencias para mi pregunta original sobre si es posible definir un área de contenido dentro de un control de usuario y hay algunas sugerencias útiles es decirASP.Net: Control de usuario con área de contenido, es claramente posible pero necesito algunos detalles

Passing in content to ASP.NET user control

y

ASP.NET User Control inner content

Ahora, como la teoría de este último mejor que el anterior solo por razones estéticas. Parece tener más sentido para mí, pero el ejemplo dado utiliza dos variables content y templateContent que el respondedor no ha definido en su código de ejemplo. Sin estos detalles, he encontrado que el ejemplo no funciona. ¿Supongo que son propiedades del control? O algo así?

Edición - DETALLES: Lo que estoy tratando de hacer

tengo necesidad de un control de usuario ASP.Net que oculta algún contenido en un panel dentro de un marcador de posición y pide la entrada de un código en una panel visible.

Esencialmente, el usuario colocará su código en el cuadro de texto proporcionado en el Panel A y lo enviará, se comprobará y, si es válido, se mostrarán el panel B y el contenido bloqueado.

Hice una prueba donde el contenido estaba codificado en el panel B, pero tan pronto como necesito convertir el contenido en una entrada genérica, falla. Si fuera solo texto o algo así, podría convertirlo en propiedad del control, pero como es, de hecho, otro Control de usuario, tengo algunas dificultades para colocarlo en el panel "oculto".

Cualquier otra solución viable también es bienvenida.

EDITAR NOTA: La solución que estoy tratando de implementar en 2.0 Encontré una solución 3.5 que no puedo usar.

El primer ejemplo parece viable, pero preferiría ir con este último si alguien pudiera completar los espacios en blanco para mí.

Gracias.

Respuesta

22

Bueno, esto es inquietantemente fácil, pero muchos de los tutoriales en la web que hablan de este tipo de cosas empujan a hacer cosas extravagantes que requieren el control para analizar ListItems o algo así.

Así que esta solución es puramente para que pueda construir un control que, por cualquier razón, tiene un marcador de posición que podría tener algo dentro (algo así como un área de contenido en una página maestra). En este caso, sucede porque el Panel que contiene el marcador de posición está oculto hasta que se han realizado las acciones de entrada apropiadas en otro panel.

En primer lugar, es necesario añadir lo siguiente:

[ParseChildren(true,"Content")] 
[PersistChildren(false)] 

justo por encima de la parte del control que tiene el siguiente aspecto:

public partial class MyControl : System.Web.UI.UserControl 

continuación, en el control con ámbito declaraciones a la cabeza del control Desea declararlo así:

private Control _content; 

[PersistenceMode(PersistenceMode.InnerProperty)] 
public Control Content { get { return _content; } set { _content = value; } } 

Por último, debe colocar el contenido en el lugar titular de la siguiente manera:

phContent.Controls.Add((Control)_content); 

Esa última línea entra en el evento Page_Init. A modo de referencia "phContent" es el nombre del titular del lugar donde desea que aparezca el contenido, así:

<asp:Panel ID="pnlLockable" runat="server" Visible="False"> 
<asp:Placeholder runat="server" ID="phContent" /> 
</asp:Panel> 

En el frente de poner fin a la aplicación resultante es el siguiente:

<uc:MyControl runat="server" ID="lockit1"> 
<Content> 
//...your stuff goes here... 
</Content> 
<uc:MyControl> 

Tenga en cuenta que Supongo que lo que está entre las etiquetas de contenido es un control de raíz. Esto se debe a que he anidado otro control de usuario allí. Me imagino que si pone el contenido que desea dentro de un panel o marcador de posición, debería estar bien.

+3

1 para el uso de los términos "perturbadoramente fácil". – NotMe

+0

Gracias. A menudo encuentro que al tratar de hacer algo razonablemente complejos, los tutoriales en línea a menudo rinden explicaciones del extremo obtuso en extremo. Al final, esto fue farly obvia una vez entendido los conceptos subyacentes, pero realmente no había pensado alguna vez en los conceptos de modo que todos los tutoriales que muestran cómo construir repetidores de plantillas y listas a medida eran simplemente no es apropiado porque no podía decir qué la implementación mínima básica era. Por lo tanto, inquietantemente fácil. – bert

+0

Brillant! i aunque yo era perturbadoramente fácil también cuando vi esto .. – Rushino

Cuestiones relacionadas