2009-02-03 16 views
6

Estoy agregando dinámicamente un control de usuario personalizado a la página según this post.Establecer propiedades en UserControl agregado de forma dinámica

Sin embargo, tengo que establecer una propiedad en el control del usuario cuando lo agregue a la página. ¿Cómo puedo hacer eso?

Fragmento de código sería bueno :)

Detalles:

tengo un control de usuario con un campo público (por ejemplo, la propiedad ... int someId pública;)

Como agrego una UserControl a una página, su tipo es UserControl. ¿Acabo de convertirlo en MyCustomUCType y establecer una propiedad en un control de conversión?

p.s. parece que he respondido mi propia pregunta después de todo.

+0

¿Qué quiere decir con establecer una propiedad? atributo html? ¿Cuándo intenta agregar la propiedad en un evento DataBound o algo así? ¿Qué evento estás creando el control? – bendewey

+0

La publicación vinculada explica lo que intenta hacer –

Respuesta

10

Ah, me respondió antes de agregar la aclaración adicional. La respuesta corta es, sí, simplemente echela como su tipo personalizado.

Dejaré el resto de mi respuesta aquí como referencia, aunque no parece que la necesite.


préstamos del código en la otra pregunta, y suponiendo que todos sus controles de usuario se pueden hacer para heredar de la misma clase base, se puede hacer esto.

Crear una nueva clase para actuar como el control de la base:

public class MyBaseControl : System.Web.UI.UserControl 
{ 
    public string MyProperty 
    { 
     get { return ViewState["MyProp"] as string; } 
     set { ViewState["MyProp"] = value; } 
    } 
} 

luego actualizar su usuario controla a heredar de su clase base en lugar del control de usuario:

public partial class SampleControl2 : MyBaseControl 
{ 
    .... 

Luego, en el lugar donde cargar los controles, cambiar esta situación:

UserControl uc = (UserControl)LoadControl(controlPath); 
PlaceHolder1.Controls.Add(uc); 

a:

MyBaseControl uc = (MyBaseControl)LoadControl(controlPath); 
uc.MyProperty = "foo"; 
PlaceHolder1.Controls.Add(uc); 
+0

. Creo que esto solo funcionó en proyectos de aplicaciones web y no en proyectos de sitios web. ¿Sigue siendo el caso? –

+0

Debería funcionar, independientemente. Nunca he tenido un problema con eso. –

1

Sí, simplemente transfiere el control al tipo adecuado. EX:

((MyControl)control).MyProperty = "blah"; 
+0

Esto no funciona en proyectos de sitios web con controles de usuario –

+0

funciona muy bien. –

+0

Funciona si registra el control en la página. –

2

"Como agrego un control de usuario a una página, su tipo de control de usuario es No acabo eché en MyCustomUCType y establecer una propiedad en un control de lanzamiento.?"

Eso es lo que haría. Si realmente está usando el código de ejemplo donde carga diferentes controles, usaría un if (x es ControlType) también.

if(x is Label) 
{  
    Label l = x as Label; 
    l.Text = "Batman!"; 
} 
else 
    //... 

Editar: Ahora es compatible con 2.0

+0

tan bueno como la respuesta es, parece que está usando 3.5 framework, el mío es 2.0. Gracias. –

+0

simplemente cambie la var a Label y será compatible con 2.0 –

Cuestiones relacionadas