2012-01-26 20 views
5

Başka bir kullanıcı denetimi BaseUserControl.ascx formu türeten bir kullanıcı denetimi DerivedUserControl.ascx oluşturmak istiyorum. Temel kullanıcı denetimi, gerektiğinde System.Web.UI.UserControl'dan türetilmiştir. Bu kullanıcı kontrolleri farklı klasörlerde tanımlanmıştır. Visual Studio 2010 Web Sitesi projesi kullandığım için (Web Uygulaması projesine geçemiyorum), bu kullanıcı denetimleri bir ad alanı içinde tanımlanmamıştır.Özel kullanıcı denetimi temel sınıfından kullanıcı denetimi türetmek

Sorunum, projeyi derlemeye çalıştığımda türetilen kullanıcı denetiminin temel sınıfının çözülemeyeceğidir (açıktır ki derleyici .ascx dosyasının temel sınıfı nasıl tanımladığını bilmez). Bu sorunu çözmenin bir yolu var mı?

Hayal edebileceğim her şeyi, başarılı olmadan denedim. Herhangi bir yardım büyük takdir edilecektir.

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

    } 
} 

Hata

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

cevap

2

ASP.NET Web Sitesi'ni kullanırken (bir Web Projesine ek olarak), DerivedUserControl.ascx'inize <@Reference> öğesini eklemeniz gerekir.

MSDN bunun itibaren

...

başka bir kullanıcı kontrolü, sayfa kaynak dosya veya bazı sanal yolunda bulunan keyfi dosya dinamik derlenmiş edilmeli ve (cari ASP.NET dosyasında karşı bağlantılı olduğunu gösterir Bu direktifin açıklandığı web sayfası, kullanıcı kontrolü veya ana sayfası).<%@ Reference VirtualPath="~/FolderName1/BaseUserControl.ascx" %>

Eğer FolderName1 sizin BaseUserControl olduğu klasördür nerede yüzden

public partial class DerivedUserControl : ASP.foldername1.baseusercontrol_ascx 

gibi başvurmak üzere yaptıktan sonra

.

+0

Wow, bunlar 'ASP.base_baseusercontrol_ascx' kullanarak çalışıyor gibi görünüyor. – CodeZombie

+0

Ben 'base' BaseUserControl.ascx içinde yaşadığı klasörün adıdır. –

+0

Çok teşekkürler, gerçekten benim günümü kurtardın: D – CodeZombie

0

sorun DerivedUserControl.ascx BaseUserControl içeren DLL erişimi yok gibi görünmektedir. Dll'ye bir referans eklediğinizden ve local = true belgesine sahip olduğunuzdan emin olun.

+0

Bir Web Sitesi Projesi kullanıyorum, bu yüzden başvurulan derlenmiş bir derleme (dll) alamıyorum. – CodeZombie

+0

Yolları Inherits'e koymaya çalışın, böylece aynı direktörde bulunmayan kodu bulabilirsiniz –

+0

a * WebSite * proje derlemeleri dinamik olarak oluşturulur –

0

Bu derleme değil:

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

Bu derliyor:

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

Yani hemen hemen ad + nokta + sizin temel sınıf adının adını ekleyin. İyi şanslar!

+0

Varsayılan olarak Web Sitesi Projeleri kullanılarak ayarlanmış bir ad alanı yoktur. – CodeZombie

1

düzenli sınıf/oluşturun. Temel sınıfınız için cs BaseUserControl.cs:

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

    } 
} 
+0

Bu güzel bir çözüm olurdu. Maalesef bir CMS'nin parçası olduğu için temel sınıfı değiştiremiyorum. – CodeZombie

+0

Bu, farklı koşullar altında teknik olarak sağlam bir çözümdür. – Patrick

İlgili konular