恥ずかしいことに、春節の休暇前に、ASCX.cs ではコードを読み込むことができるのに、ASCX ではソース ファイルを読み込むことができないというコードを書きました。この問題を解決した後、今日仕事に戻ったところ、問題の原因は ASPX の @Register コマンドの記述が間違っていることがわかりました。
正しい方法は次のように書く必要があります。
<%@ Register TagPrefix="myTagPrefix" TagName="ConfigNavigation" Src="/Controls/ConfigNavigation.ascx" %> ただし、次のように書きました。
<%@ Register TagPrefix="myTagPrefix" Namespace="MyWEB.Controls" Assembly="MyWebProject" %>後者の書き方では、cs ファイルに対応するクラスのみがロードされ、ascx のコンテンツはロードされないため、問題が発生します。ここで遭遇しました。
以下は、MSDN のhttp://msdn.microsoft.com/zh-cn/library/c76dd5k1.aspxを参照してまとめられた @Register コマンドを記述するいくつかの方法の概要です。
<%@ 登録 tagprefix="tagprefix" namespace="namespace" Assembly="assembly" %>
<%@ 登録 tagprefix="tagprefix" namespace="namespace" %>
<%@ Register tagprefix="tagprefix" tagname="tagname" src="pathname" %>各属性は次のように説明されます。
タグプレフィックス
ディレクティブを含むファイルで使用されるタグの名前空間への短い参照を提供する任意のエイリアス。
namespace 登録されるカスタム コントロールの名前空間。
tagname クラスに関連付けられた任意のエイリアス。このプロパティはユーザー コントロールにのみ使用されます。
Assembly tagprefix 属性に関連付けられた名前空間に存在するアセンブリ。
アセンブリ名にファイル拡張子を含めることはできません。また、アセンブリ属性が欠落している場合、ASP.NET アナライザーはソース コードがアプリケーションの App_Code フォルダーに存在すると想定することに注意してください。コントロールのソース コードをコンパイルせずにページに登録する場合は、ソース コードを App_Code フォルダーに配置します。 ASP.NET は、実行時に App_Code フォルダー内のソース ファイルを動的にコンパイルします。
src および tagprefix:tagname ペアに関連付けられた宣言型 ASP.NET ユーザー コントロール ファイルの場所 (相対または絶対)。
src 属性値には、アプリケーションのルート ディレクトリからユーザー コントロール ソース ファイルまでの相対パスまたは絶対パスを指定できます。使いやすさを考慮して、相対パスを使用することをお勧めします。たとえば、アプリケーションのすべてのユーザー コントロール ファイルがアプリケーション ルート ディレクトリの Usercontrol サブディレクトリに保存されていると仮定します。ユーザー コントロールを Usercontrol1.ascx ファイルに含めるには、@Register ディレクティブに次の内容を含めます。
Src="~usercontrolusercontrol1.ascx" チルダ (~) 文字はアプリケーションのルート ディレクトリを表します。