カスタム コントロール (ASCX コントロールではない) をどのように作成し、さらに重要なこととして、それをプロジェクトで使用しますか? そのために別のプロジェクトを作成したり、DLL としてコンパイルしたりしたくありません。
4 に答える
サーバー コントロールは、DLL にコンパイルする必要があります。プロジェクトにアセンブリを追加することを恐れる必要はありません。これは、適切なプロジェクト編成を作成するのに役立ちます。
ASP.NET サーバー コントロールは、実際にはアセンブリ内のカスタム クラスです。それらには、関連付けられた「ascx」マークアップ ファイルがありません。
ASP.NET サーバー コントロールを使用するには、そのクラスを探す場所を ASP.NET に指示する必要があります。
まず、クラス ライブラリ プロジェクトを作成し、それをソリューションに追加します。ここでは「CustomControls.dll」と呼びます。
そこに、単純なクラスを追加して Web コントロールにします。
public class Hello : System.Web.UI.WebControl
{
public override Render(HtmlTextWriter writer)
{
writer.Write("Hello World");
base.Render(writer);
}
}
プロジェクトをビルドし、メイン Web プロジェクトへの参照として追加します。
ここで、このコントロールを使用する ASPX ページで、それを登録する必要があるため、ページ ディレクティブの後に aspx の最初の行としてこれを追加します。
<%@ Register TagPrefix="Example" Namespace="CustomControls" Assembly = "CustomControls" %>
これで、<Example:Hello> という名前のコントロールが利用できるはずです。Intellisense に表示されるまでに 1 分ほどかかる場合があります。
コントロールのクラスを作成し、ソリューションをビルドします。すべてがうまくいけば、ツールボックスでコントロールが利用できるようになります。
VS がツールボックスを更新しないことがあります。その場合は、Register ディレクティブをページに追加します。
<%@ Register Assembly="NAME_OF_THE_ASSEMBLY" Namespace="NAMESPACE_OF_THE_CUSTOM_CONTROL" TagPrefix="cc1" %>
次に、ページ上のコントロールを使用します。
<cc1:mycustompanel id="MyCustomPanel1" runat="server"><asp:TextBox id="TextBox1" runat="server"></asp:TextBox></cc1:mycustompanel>
*.ascx ファイルが不要で、別のプロジェクトが不要で、*.dll ファイルが不要な場合、何が残ると思いますか? コードはどこかに存在する必要があります。