2012-02-02 10 views
5

tengo el siguiente escenario:error en controles de usuario de carga dinámica que hacen referencia a otros controles en diferentes directorios

Mi estructura de directorios es:

  • ./Pages/Page.aspx
  • ./RedControls /RedControl.ascx
  • ./BlueControls/BlueControl.ascx

Page.aspx.cs crea dinámicamente RedControl:

RedControls_RedControl C = (RedControls_RedControl)Page.LoadControl("~/RedControls/RedControl.ascx"); 

RedControl.ascx utiliza BlueControl:

<uc:BlueControl runat="server" ID="ctrControl" /> 

Esto funciona muy bien en el modo de desarrollo, sin embargo, cuando despliego, consigo:

Tipo de excepción - HttpParseException - La base class incluye el campo 'ctrControl', pero su tipo (BlueControls_BlueControl) no es compatible con el tipo de control (ASP.BlueControls_BlueControl_ascx).

Si muevo RedControl y BlueControl en el mismo directorio, entonces funciona bien cuando se implementa.

¿Cómo puedo hacer que esto funcione sin tener que mover archivos a un único directorio (tenemos demasiadas instancias de esto).

Cualquier observación sería muy apreciada.

+0

¿Existen quizás versiones antiguas de archivos ASCX o DLL implementados? El hecho de que dice que el tipo no es compatible me indica que está cargando el tipo de una fuente inesperada. – Jacob

+0

No, no hay versiones anteriores implementadas. Instalación fresca. – Jack

+0

intenté utilizar ".." en lugar de "~", como "LoadControl (" ../ RedControls/RedControl.ascx "); – Akhil

Respuesta

3

Esto podría suceder en algunos casos en los que tenga varias carpetas que tengan controles que se señalen entre sí en ambas direcciones (o en situaciones más complejas que impliquen más carpetas).

La buena noticia es que hay una manera simple de resolverlo: desactivar el procesamiento por lotes configurando batch = "false" en la sección <compilation> en web.config.

+0

Esa es solo una solución viable para proyectos pequeños. No se recomienda para implementaciones más grandes. Buscando una solución definitiva, no una curita. – Jack

+0

En realidad, ese no es el caso. En algunos casos, hemos sugerido esta técnica a clientes con soluciones muy grandes y tuvieron mucho éxito. Lo primero que debes probar aquí es comprobar si al hacerlo resuelve el problema.Si lo hace, entonces puede ver el uso de la memoria para verificar si hace una diferencia mensurable. –

Cuestiones relacionadas