update net delete asp asp.net ascx webusercontrol

asp.net - update delete asp net



Error de ASP.NET: la página Y.ascx no puede usar el control de usuario X.ascx (2)

Sus únicas soluciones posibles son:

  • Mueva el control fuera del directorio que está compartiendo actualmente con outer.ascx, o
  • Vuelva a registrar el control dentro de la external.ascx como ya mencionó
  • Vuelva a escribirlos en el código como controles en una biblioteca separada

Personalmente, creo que moverse es lo más fácil, si funciona para sus soluciones. Segundo sería volver a registrarse, aunque molesto. Es probable que no valga la pena el esfuerzo de abstraerlos en una biblioteca de código completo si es la única razón por la que lo está haciendo.

Recibo el siguiente error cuando intento crear el proyecto del sitio web en Visual Studio 2010:

La página ''/WebSite/controls/C2.ascx'' no puede usar el control de usuario ''/WebSite/controls/C1.ascx'', porque está registrado en web.config y se encuentra en el mismo directorio que la página.

Tengo 2 controles de usuario web:

controls/C1.ascx controls/C2.ascx

Los controles se han registrado en web.config:

<configuration> <system.web> <pages> <controls> <add src="~/controls/C1.ascx" tagPrefix="my" tagName="C1"/> <add src="~/controls/C2.ascx" tagPrefix="my" tagName="C2"/> </controls> </pages> </system.web> </configuration>

C1.ascx contiene solo un HTML estático, C2.ascx está tratando de incluir C1:

C1.ascx contiene solo un simple HTML simple estático. C2.ascx está tratando de incluir C1.ascx:

<%@ Control Language="VB" %> <my:C1 runat="server" /> <p>Hello from C2</p>

Al intentar generar el proyecto, aparece un mensaje de error en la parte superior. Me doy cuenta de que este problema se puede solucionar agregando otra directiva de Registro a C2.ascx ...:

<%@ Register Src="~/controls/C1.ascx" TagPrefix="ctl" TagName="C1" %>

... pero me pregunto si hay una solución más limpia y ¿por qué me da el error en primer lugar?


También puedes poner los controles en diferentes carpetas. Pero no creo que esto sea mucho más limpio o mejor.

Por cierto: este comportamiento es por diseño, como puede leer en esta página de MSDN (busque la nota amarilla casi al final de la página).