ASP.NET を使用すると、ユーザーはコントロールを作成できます。これらのユーザー定義コントロールは次のように分類されます。
ユーザーコントロール
カスタムコントロール
ユーザー コントロールは、他の多くのページで使用できる小型の ASP.NET ページまたは Web フォームのように動作します。これらは System.Web.UI.UserControl クラスから派生します。これらのコントロールには次のプロパティがあります。
拡張子は .ascx です。
タグを含めることはできません。
これらには、Page ディレクティブの代わりに Control ディレクティブがあります。
この概念を理解するために、Web ページのフッターとして機能する単純なユーザー コントロールを作成してみましょう。ユーザー コントロールを作成して使用するには、次の手順を実行します。
新しい Web アプリケーションを作成します。
ソリューション エクスプローラーでプロジェクト フォルダーを右クリックし、[新しい項目の追加] を選択します。
[新しい項目の追加] ダイアログ ボックスから [Web ユーザー コントロール] を選択し、footer.ascx という名前を付けます。最初は、footer.ascx には Control ディレクティブのみが含まれています。
<%@ 制御言語="C#" AutoEventWireup="true" CodeBehind="footer.ascx.cs" Inherits="customcontroldemo.footer" %>
次のコードをファイルに追加します。
<table> <tr> <td align="center"> 著作権 ©2010 TutorialPoints Ltd.</td> </tr> <tr> <td align="center"> 場所: AP 州ハイデラバード </td> </ tr></table>
ユーザー コントロールを Web ページに追加するには、Register ディレクティブとページ ユーザー コントロールのインスタンスを追加する必要があります。次のコードはその手順を示しています。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="customcontroldemo._Default" %><%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > < head runat="server"> <title> 無題ページ </title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Text="ASP.Net チュートリアルへようこそ "></asp:Label> <br /> <br /> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" テキスト="著作権情報" /> </div> <Tfooter:footer ID="footer1" runat="server" /> </form> </body></html>
実行すると、ページ フッターが表示され、サイトのすべてのページでコントロールが使用可能になります。
以下の点に注意してください。
(1) Register コマンドは、コントロールのラベル名とラベル プレフィックスを指定します。
<%@ Src="~/footer.ascx" を登録します。 TagName="footer" TagPrefix="Tfooter" %>
(2)ページにユーザー コントロールを追加する場合は、次のタグ名とプレフィックスを使用する必要があります。
<Tfooter:footer ID="footer1" runat="server" />
カスタム コントロールは、別個のコレクションとして展開されます。これらはダイナミック リンク ライブラリ (DLL) にコンパイルされ、他の ASP.NET サービス コントロールとして使用されます。これらは次のいずれかの方法で作成できます。
既存のコントロールからカスタム コントロールを取得する。
2 つ以上の既存のコントロールを組み合わせて、新しいカスタム コントロールを作成します。
基本コントロール クラスから取得します。
この概念を理解するために、ブラウザ上でテキスト メッセージを単純に表示するカスタム クラスを作成してみましょう。コントロールを作成するには、次の手順を実行します。
新しい Web サイトを作成します。ソリューション エクスプローラーのツリーの上部にあるソリューション (プロジェクトではない) を右クリックします。
[新しいプロジェクト] ダイアログ ボックスで、プロジェクト テンプレートから [ASP.NET サーバー コントロール] を選択します。
上記の手順では、新しいプロジェクトを追加し、ServerControl1 というソリューションの完全なカスタム コントロールを作成します。この例では、CustomControls プロジェクトに名前を付けます。このコントロールを使用するには、ページに登録する前に、Web ページへの参照として追加する必要があります。既存のプロジェクトに参照を追加するには、プロジェクト (ソリューションではなく) を右クリックし、[参照の追加] をクリックします。
[参照の追加] ダイアログ ボックスの [プロジェクト] タブから CustomControl プロジェクトを選択します。ソリューション エクスプローラーは参照を表示できます。
ページ上でコントロールを使用するには、@Page ディレクティブの下に Register ディレクティブを追加します。
<%@ 登録アセンブリ="CustomControls" 名前空間="CustomControls" TagPrefix="ccs" %>
さらに、コントロールは他のコントロールと同様に使用できます。
<form id="form1" runat="server"> <div> <ccs:ServerControl1 runat="server" Text = "私はカスタム サーバー コントロールです" /> </div> </form>
実行すると、次に示すように、コントロールの Text プロパティがブラウザに表示されます。
前の例では、カスタム クラスの Text プロパティ値が設定されました。 ASP.NET は、コントロールの作成時にデフォルトでこのプロパティを追加します。コントロールのファイルの後の次のコードは、これを明らかにします。
System を使用する;System.Collections.Generic を使用する;System.ComponentModel を使用する;System.Linq を使用する;System.Text を使用する;System.Web を使用する;System.Web.UI を使用する;System.Web.UI.WebControls を使用する;名前空間 CustomControls{ [ DefaultProperty("Text")] [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1 >")] public class ServerControl1 : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localizable(true)] public string Text { get { String s = (String)ViewState["Text"] ; return ((s == null) ? "[" + this.ID + "]" : s); set {ViewState["Text"] = 値; } } protected オーバーライド void RenderContents(HtmlTextWriter 出力) {output.Write(Text) } }
上記のコードは、カスタム コントロール用に自動的に生成されます。イベントとメソッドをカスタム コントロール クラスに追加できます。
ServerControl1 という名前の以前のカスタム コントロールを拡張しましょう。回文をチェックする許可を与える checkpalindrome というメソッドを与えましょう。
回文は、逆にしても同じ綴りになる単語/リテラル値です。たとえば、マラヤーラム語、マダム、サラスなど。
カスタム コントロールのコードを拡張すると、次のようになります。
System を使用する;System.Collections.Generic を使用する;System.ComponentModel を使用する;System.Linq を使用する;System.Text を使用する;System.Web を使用する;System.Web.UI を使用する;System.Web.UI.WebControls を使用する;名前空間 CustomControls{ [ DefaultProperty("Text")] [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1 >")] public class ServerControl1 : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localizable(true)] public string Text { get { String s = (String)ViewState["Text"] ; return ((s == null) ? "[" + this.ID + "]" : s); set {ViewState["Text"] = 値; } } protected override void RenderContents(HtmlTextWriter Output) { if (this.checkpanlindrome()) {output.Write("これは回文です: <br />"); >"); 出力.Write("<B>"); 出力.Write(テキスト); 出力.Write("</B>"); Output.Write("</FONT>") } else {output.Write("これは回文ではありません:<br />");出力.書き込み("<B>"); 出力.書き込み("</B>"); } } protected bool checkpanlindrome(); if (this.Text != null) { String str = this.Text; strtoupper = Text.ToUpper(); rev = strtoupper.ToCharArray(); rev); if (strtoupper == strrev) { true を返す } else { false を返す } }}
スペースのコードを変更する場合は、変更をプロジェクトに反映できるように、[ビルド] --> [ソリューションのビルド] をクリックしてメソッドをビルドする必要があります。ユーザーがテキストを入力できるように、テキスト ボックスとボタン コントロールをページに追加します。ボタンをクリックすると回文を確認します。
<form id="form1" runat="server"> <div> 単語を入力します: <br /> <asp:TextBox ID="TextBox1" runat="server"> </asp:TextBox> <br /> < br /> <asp:Button ID="Button1" runat="server onclick="Button1_Click" Text="回文チェック" /> <br /> <br /> <ccs:ServerControl1 ID="ServerControl11" runat="server" Text = "" /> </div></form>
ボタンの Click イベント ハンドラーは、テキスト ボックス内のテキストをカスタム コントロールの text プロパティにコピーするだけです。
protected void Button1_Click(object sender, EventArgs e){ this.ServerControl11.Text = this.TextBox1.Text;}
実行すると、コントロールは回文を正常に検出します。
以下の点に注意してください。
(1)カスタム コントロールへの参照を追加すると、その参照がツールボックスに追加され、他のコントロールと同様にツールボックスから直接使用できるようになります。
(2)カスタム コントロール クラスの RenderContents メソッドがオーバーライドされ、独自のメソッドとイベントを追加できるようになりました。
(3) RenderContents メソッドは、ブラウザ上での表示を担当する HtmlTextWriter タイプのパラメータを受け取ります。