ASP.NET C# のカスタム コントロール
-
25-09-2019 - |
質問
からのみ継承する単純なカスタム コントロールを作成しました。 Literal
コントロールであり、まだ拡張機能がないため、コードは空です。
名前空間:カスタムコントロール
クラス名:リテラル:System.Web.UI.WebControls.Literal
次にこのコントロールを aspx
次のようなページ:
<%@ Register TagPrefix="web" Namespace="CustomControls" %>
(いくつかのチュートリアルで、これが web.config など以外に登録方法の 1 つであると読みました)
結局のところ、私にはインテリジェンスがありません。さらに悪いことに、「不明なサーバータグ」という解析エラーが発生します。web」コントロールを含むページを実行しようとすると、
この情報が必要な場合に備えて、新しい Web サイトではなく「新しいプロジェクトの作成」を使用しました。
私の問題は何でしょうか?
前もって感謝します。
解決
これが私がやった方法です。何もないところから一歩ずつ始めていきます。この最初の方法では、2 番目のプロジェクト/アセンブリを使用します。App_code バージョンについては、下にスクロールします。
Webアプリケーションプロジェクトの手法
- 新しい ASP.Net Web アプリケーションを作成します。名前に注目してください。私の名前は WebApplication2 です。すでに既存の Web アプリケーションがある場合は、プロジェクトのプロパティ セクションをダブルクリックして、[アセンブリ名] プロパティを確認し、それをメモします。
- Web アプリケーションに Literal.cs という名前の新しいクラスを作成します。
クラス定義に次のようなコードを追加します。
namespace CustomControls { public class Literal : System.Web.UI.WebControls.Literal { } }
次の register タグを aspx ページの上部に追加します。
<%@ 登録アセンブリ="WebApplication2" 名前空間="カスタムコントロール" タグプレフィックス="web" %>
アセンブリ名が異なる場合は、ここで変更してください。VB.Net でこれを実行すると、名前空間が C# の場合のように単なる CustomControls ではなく、WebApplication1.CustomControls になっていることに気付きました。ちょっと奇妙です。
新しいコントロールをページに追加します。
<web:Literal ID="Literal1" runat="server" Text="test" />
別プロジェクト方式
- 新しい空の Web サイト (ASP.Net) を作成します。
- CustomControls という名前の新しい ASP.Net サーバー コントロール ライブラリをソリューションに追加します。
新しいクラスを Literal という名前の新しいプロジェクトに追加します (私は C# を使用しているため、ファイルの名前は Literal.cs です)。以下は私の超基本的なコードであり、質問で説明されているコードと一致するはずです。
namespace CustomControls { public class Literal : System.Web.UI.WebControls.Literal { } }
CustomControls プロジェクトへの参照を Web サイトに追加します。
aspx ページの先頭にアセンブリ登録を追加します。
<%@ 登録アセンブリ="CustomControls" namespace="CustomControls" tagprefix="web" %>
コントロールの新しいインスタンスをページに追加します。
<web:Literal ID="Literal1" runat="server" Text="test" />
App_Code メソッド内
- 新しい空の Web サイト (ASP.Net) を作成します。
新しいクラスを App_Code フォルダー Literal2 に追加します (C# を使用しているため、ファイルの名前は Literal2.cs です)。以下は私の超基本的なコードであり、質問で説明されているコードと一致するはずです。コンパイルエラーが発生せずに上記のメソッドと組み合わせて使用できるように、これを 2 としました。
namespace CustomControls { public class Literal2 : System.Web.UI.WebControls.Literal { } }
次の行を先頭に追加して、aspx ページの app_code のアセンブリ/名前空間を登録します。
<%@ 登録名前空間="CustomControls" Assembly="__code" tagprefix="web" %>
新しいコントロールのインスタンスをページに追加します。
<web:Literal2 ID="literal2" runat="server" Text="test2" />
Visual Studio を使用してこれをテストしましたが、すべて問題なく動作しました。
他のヒント
また、web.configファイルで、あなたのコントロールを登録することができます
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="web" namespace="MyProject.CustomControls" assembly="MyProject" />
</controls>
</pages>
のウェブサイトについては、この意志作品
<add tagPrefix ="web" namespace="ASP.App_Code.CustomControls" />
問題はあなたの中にあります <%@ Register TagPrefix="web" Namespace="CustomControls" %>
鬼ごっこ:アセンブリ名が抜けています。
必ずそうなるはずです <%@ Register TagPrefix="web" Namespace="CustomControls" Assembly="YourAssemblyName" %>
. 。クラスのアセンブリ名を見つけるのが難しい場合は、次のヒントを参照してください。
- Web アプリケーションの Visual Studio プロジェクト内、または別の DLL (共有ライブラリ) プロジェクト内にクラスを作成した場合は、プロジェクトを右クリックし、[プロパティ] に移動してアセンブリ名を取得します。
- App_Code ディレクトリに .cs ファイルを作成した場合は、
ASP.App_Code
働くはずだ
それ以外の場合は、プロジェクトのレイアウトに関する情報を提供してください。
一番簡単な方法は、ドラッグ・アンド・ドロップします(ページが同じ溶液中にある場合)のページへ上のLiteral.ascxをしている別の解決策である、あなたは、VSのツールボックスにコントロールを追加することができますし、ページ上のコントロールをドラッグ&ドロップます。
あなたはsrc属性を忘れてしまっています。
<%@ Register TagPrefix="web" Namespace="CustomControls" Src="PathToYourCustomControl" %>