2012-01-26 4 views
5

Voglio creare un controllo utente DerivedUserControl.ascx che deriva da un altro controllo utente BaseUserControl.ascx. Il controllo utente di base deriva da System.Web.UI.UserControl come richiesto. Questi controlli utente sono definiti in diverse cartelle. Poiché sto utilizzando un progetto di sito Web di Visual Studio 2010 (non sono in grado di passare al progetto di applicazioni Web), questi controlli utente non sono definiti all'interno di uno spazio dei nomi.Deriva il controllo utente dalla classe base controllo utente personalizzato

Il mio problema è che quando provo a compilare il progetto, la classe base del controllo utente derivato non può essere risolta (ovviamente perché il compilatore non sa quale file .ascx definisce la classe base). C'è un modo per risolvere questo problema?

Ho provato tutto quello che potevo immaginare, senza successo. Qualsiasi aiuto sarebbe molto apprezzato.

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) 
    { 

    } 
} 

errore

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

risposta

2

Quando si utilizza il sito Web ASP.NET (come indicato in un progetto Web) è necessario aggiungere l'elemento <@Reference> a DerivedUserControl.ascx.

Da MSDN è ...

Indica che un altro controllo utente, file di sorgente della pagina, o arbitrario file che si trova ad un certo percorso virtuale devono essere compilati in modo dinamico e collegati contro il file ASP.NET corrente (Pagina Web, controllo utente o pagina principale in cui viene dichiarata questa direttiva.

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

Una volta fatto che è possibile farvi riferimento in questo modo

public partial class DerivedUserControl : ASP.foldername1.baseusercontrol_ascx 

Dove FolderName1 è la cartella BaseUserControl è in.

+0

Wow, questi sembrano funzionare usando 'ASP.base_baseusercontrol_ascx'. – CodeZombie

+0

Prendo 'base' è il nome della cartella in cui si trova BaseUserControl.ascx. –

+0

Grazie mille, hai davvero salvato la mia giornata: D – CodeZombie

0

Il problema sembra essere che il DerivedUserControl.ascx non ha accesso alla DLL che contiene il BaseUserControl. Assicurati di aggiungere un riferimento alla DLL e di avere copia local = true.

+0

Uso un progetto di sito Web in modo da non ottenere un assembly compilato (dll) di riferimento. – CodeZombie

+0

Provare a inserire il percorso negli Erediti, in modo che possa trovare il codice che non è nella stessa direttrice –

+0

In un progetto * WebSite * i gruppi vengono generati dinamicamente –

0

Questo non può essere compilato:

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

Ciò compilare:

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

Così più o meno aggiungere il nome dello spazio dei nomi + punto + il nome della classe di base. Buona fortuna!

+0

Per impostazione predefinita non ci sono spazi dei nomi impostati utilizzando Progetti sito Web. – CodeZombie

1

Creare una normale classe di /. cs per la tua classe base chiamata BaseUserControl.cs:

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

    } 
} 
+0

Sarebbe una bella soluzione. Purtroppo non posso modificare la classe base perché fa parte di un CMS. – CodeZombie

+0

Questa è una soluzione tecnicamente valida in circostanze diverse. – Patrick