Como cargar un control a traves de un namespace de forma dinamica?

Iniciado por WHK, 25 Julio 2013, 21:51 PM

0 Miembros y 1 Visitante están viendo este tema.

WHK

Estoy haciendo un desarrollo en c# para paginas web ASP y actualmente estoy haciendo las inclusiones de los themes y módulos de la siguiente manera:

Control theme = (Control)LoadControl(config.theme.rutas.DirectorioLocal);

/* Agrega el Theme al control principal */
this.FindControl("bufferTheme").Controls.Add(theme);


No hay ningún problema pero quiero cambiar la manera de cargar dinamicamente un control dentro de otro sin tener que depender de las rutas de archivos. Se me ocurrió intentar llamar al namespace de manera dinámica pero no resulta, al parecer c# no lo soporta:

(Control)Themes["themeelegido"]

Donde el namespace del archivo Default.Master es "Themes.themeelegido.Default"

Hay algo similar? por ejemplo:
(Control)LoadControlFromNameSpace("Themes." + theme.nombre + ".Default")

Novlucker

Código (csharp) [Seleccionar]
Type t = Type.GetType("Themes.themeelegido.Default");
Control theme = (Control)LoadControl(t, null);


Con algo como esto debería de funcionar, pero no lo he probado :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

WHK

Por alguna extraña razón me pasa sin errores pero no se escribe el control html en la pagina, queda en blanco.

Al ver los objetos desde visual studio me aparece que el objeto theme si está bien definido y equivale al control del theme, pero al agregarlo sobre el otro control este queda en blanco como si el código html no existiera y lo mas raro es que no me arroja ningún error.

Código (csharp) [Seleccionar]
/* Carga el Theme */
Type t = Type.GetType("Themes.simpleLayout.Default");
Control theme = (Control)LoadControl(t, null);
//Control theme = (Control)LoadControl(config.theme.rutas.archivoDefaultVirtual);

/* Agrega el Theme al control principal */
this.FindControl("bufferTheme").Controls.Add(theme);


..... ahora que me doy cuenta navegando entre el arbol de subojetos del objeto theme dice que no tiene ningún master asociado y se supone que el control es el master, está definido pero está como vacio :-/ y el nombre del namespace está bien puesto.

Intenté ponerlo sin el .Default pero ahi si me arroja un error.

Por lo menos ya tengo una pequeña luz sobre como hacerlo, ahora es cosa de ver porque devuelve un valor en blanco. Será porque loadcontrol acepta un string de ruta y no de tipo? quien sabe, a lo mejor me hubiera dado un error si fuera asi de estricto.

Novlucker

Hay un problema evidente que no tuve en cuenta, en el ascx está la inicialización de los controles, y cuando cargas el control desde la clase te estas perdiendo esa parte :-\.
http://msdn.microsoft.com/en-us/library/ewtd66a0%28v=VS.90%29.aspx#CommunityContent (último comentario)

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

WHK

bueno, mejor lo he dejado como ruta de archivo tal como estaba antes xD igual gracias.