2012-01-26 16 views
5

Quiero crear un control de usuario DerivedUserControl.ascx que deriva de otro control de usuario BaseUserControl.ascx. El control de usuario base deriva de System.Web.UI.UserControl según se requiera. Estos controles de usuario se definen en diferentes carpetas. Debido a que estoy usando un proyecto de sitio web de Visual Studio 2010 (no puedo cambiar al proyecto de aplicación web), estos controles de usuario no están definidos dentro de un espacio de nombres.Derivar el control de usuario de la clase base de control de usuario personalizado

Mi problema es que cuando intento compilar el proyecto, no se puede resolver la clase base del control de usuario derivado (obviamente porque el compilador no sabe qué archivo .ascx define la clase base). ¿Hay alguna manera de resolver este problema?

Probé todo lo que pude imaginar, sin éxito. Cualquier ayuda sería muy apreciada.

BaseUserControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="BaseUserControl.ascx.cs" Inherits="BaseUserControl" %> 

BaseUserControl.ascx.cs

public partial class BaseUserControl : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

DerivedUserControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="DerivedUserControl.ascx.cs" Inherits="DerivedUserControl" %> 

DerivedUserControl.ascx.cs

public partial class DerivedUserControl : BaseUserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

error

The type or namespace name 'BaseUserControl' could not be found 

Respuesta

2

Al usar el sitio web ASP.NET (como en el caso de un proyecto web) debe agregar el elemento <@Reference> a su DerivedUserControl.ascx.

De MSDN que ...

Indica que otro control de usuario, página de archivo de origen o arbitraria archivo que se encuentra en algún camino virtual deben ser compilados de forma dinámica y vinculados con el archivo ASP.NET actual (Página web, control de usuario o página maestra) en el que se declara esta directiva.

<%@ Reference VirtualPath="~/FolderName1/BaseUserControl.ascx" %>

Una vez que hayas hecho esto puede hacer referencia a ella como tal

public partial class DerivedUserControl : ASP.foldername1.baseusercontrol_ascx 

Dónde FolderName1 es la carpeta de su BaseUserControl está en.

+0

Guau, parece que funcionan con 'ASP.base_baseusercontrol_ascx'. – CodeZombie

+0

Lo tomo 'base' es el nombre de la carpeta en la que vive BaseUserControl.ascx. –

+0

Muchas gracias, realmente me salvó el día: D – CodeZombie

0

El problema parece ser que el DerivedUserControl.ascx no tiene acceso a la DLL que contiene el BaseUserControl. Asegúrese de agregar una referencia a la DLL y tener copy local = true.

+0

Uso un proyecto de sitio web para no obtener un ensamblado compilado (dll) al que pueda hacer referencia. – CodeZombie

+0

Intente poner la ruta en las Heredades, para que pueda encontrar el código que no está en el mismo directivo –

+0

En un proyecto * WebSite * los ensamblados se generan dinámicamente –

0

Esto no se compila:

namespace MyBase 
{ 
    public class BaseUserControl : System.Web.UI.UserControl 
    { } 
} 
public class DerivedUserControl : BaseUserControl 
{ } 

Esto se compila:

namespace MyBase 
{ 
    public class BaseUserControl : System.Web.UI.UserControl 
    { } 
} 
public class DerivedUserControl :MyBase.BaseUserControl 
{ } 

por lo que añadir más o menos el nombre del espacio de nombres + punto + el nombre de la clase base. ¡Buena suerte!

+0

No hay espacios de nombres configurados mediante proyectos de sitio web de forma predeterminada. – CodeZombie

1

crear una clase/regular. cs para su clase base llamada BaseUserControl.cs:

public class BaseUserControl : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 
+0

Esa sería una buena solución. Desafortunadamente no puedo modificar la clase base porque es parte de un CMS. – CodeZombie

+0

Esa es una solución técnicamente válida en diferentes circunstancias. – Patrick

Cuestiones relacionadas