2012-01-26 14 views
5

BaseUserControl.ascxという形で別のユーザーコントロールDerivedUserControl.ascxを作成したいと思います。基本ユーザーコントロールは、必要に応じてSystem.Web.UI.UserControlから派生します。これらのユーザーコントロールは、異なるフォルダに定義されています。 Visual Studio 2010 Webサイトプロジェクト(Webアプリケーションプロジェクトに切り替えることができません)を使用しているため、これらのユーザーコントロールは名前空間内で定義されていません。カスタムユーザーコントロールベースクラスからユーザーコントロールを派生

私の問題は、プロジェクトをコンパイルしようとすると、派生したユーザーコントロールの基本クラスを解決できないことです(明らかに、コンパイラは.ascxファイルが基本クラスを定義していることを知らないためです)。この問題を解決する方法はありますか?

私は想像できるすべてを試しましたが、成功することはありませんでした。どんな助けでも大歓迎です。

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

    } 
} 

エラー

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

答えて

2

ASP.NET Webサイト(Webプロジェクトに付属)を使用する場合は、<@Reference>要素をDerivedUserControl.ascxに追加する必要があります。

MSDNそれから

は...

別のユーザーコントロール、ページのソースファイル、またはいくつかの仮想パスにある任意の ファイルを動的にコンパイルする必要があると は(現在のASP.NETファイルに対してリンクされることを示しWebページ、ユーザーコントロール、または マスターページ)に、このディレクティブが宣言されています。

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

あなたがそう

public partial class DerivedUserControl : ASP.foldername1.baseusercontrol_ascx 

FolderName1は、あなたのBaseUserControlが入っているフォルダです。どこのようにそれを参照できることをやったら。

+0

うわー、これらは 'ASP.base_baseusercontrol_ascx'を使って動作するようです。 – CodeZombie

+0

私は 'base'はBaseUserControl.ascxが住んでいるフォルダの名前です。 –

+0

本当にありがとう、あなたは本当に私の一日を保存しました:D – CodeZombie

0

問題はDerivedUserControl.ascxがBaseUserControlが含まれているDLLへのアクセス権を持っていないということであるように思われます。 dllへの参照を追加して、copy local = trueを持っていることを確認してください。

+0

Webサイトプロジェクトを使用しているため、参照できるコンパイル済みアセンブリ(dll)が取得できません。 – CodeZombie

+0

継承にパスを入れて、同じ指示記号にないコードを見つけるようにしてください。 –

+0

* WebSite *プロジェクトではアセンブリが動的に生成されます –

0

これはコンパイルされません:

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

これはコンパイルん:

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

だから、かなりのネームスペース+ドット+あなたのベースクラスの名前の名前を追加します。 幸運を祈る!

+0

デフォルトでWebサイトプロジェクトを使用して名前空間が設定されていません。 – CodeZombie

1

通常のクラス/を作成します。あなたの基本クラスのcsはBaseUserControl.csと呼ばれます:

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

    } 
} 
+0

それはすてきな解決策でしょう。残念ながら、基本クラスはCMSの一部であるため変更できません。 – CodeZombie

+0

これは、状況によっては技術的に健全な修正です。 – Patrick

関連する問題