方法 : ASP.NET Web ページにコントロールをプログラムによって追加する
更新 : 2007 年 11 月
コントロールをデザイン時ではなく実行時に作成した方が実際的である場合もあります。たとえば、検索結果ページで結果をテーブルに表示することがあります。この場合、返される項目の数がわからないため、返される各項目について 1 つのテーブル行を動的に生成する必要があります。
メモ : |
---|
既存のコントロールの多くは、コントロールを動的に作成することで実現できる機能をサポートしています。たとえば、Repeater、DataList、RadioButtonList の各コントロールは、ページの実行時に行やその他のコントロール要素を動的に作成できます。 |
コントロールをプログラムでページに追加するには、新しいコントロールのコンテナが必要です。たとえば、テーブルの行を作成する場合、コンテナはテーブルです。明確にコンテナとして機能するコントロールが存在しない場合は、PlaceHolder Web サーバー コントロールまたは Panel Web サーバー コントロールを使用できます。
場合によっては、静的テキストとコントロールの両方を作成する必要があります。静的テキストを作成する場合は、Literal Web サーバー コントロールまたは Label Web サーバー コントロールを使用できます。これらのコントロールは、ほかのコントロールと同様にコンテナに追加できます。実行時に作成されるコントロールのビューステートについては、「動的なコントロールとビューステート」を参照してください。
重要 : |
---|
プログラムによって ASP.NET Web フォーム ページにコントロールを追加するには
次の例に示すように、コントロールのインスタンスを作成してプロパティを設定します。
Dim myLabel As New Label() myLabel.Text = "Sample Label"
Label myLabel = new Label(); myLabel.Text = "Sample Label";
メモ : 通常の場合、コントロールはページの初期化の段階でページに追加されます。ページの段階の詳細については、「ASP.NET ページのライフ サイクルの概要」を参照してください。
次の例に示すように、既にページにあるコンテナの Controls コレクションに新しいコントロールを追加します。
Dim Panel1 As New Panel() Panel1.Controls.Add(myLabel)
Panel Panel1= new Panel(); Panel1.Controls.Add(myLabel);
メモ : Controls プロパティはコレクションのため、AddAt メソッドを使用して、新しいコントロールを他の前などの特定の場所に配置できます。ただし、この指定によってページにエラーが発生することもあります。詳細については、「動的なコントロールとビューステート」を参照してください。
DropDownList1 というコントロールの SelectedIndexChanged イベントのイベント ハンドラのコード例を次に示します。このハンドラは、ドロップダウン リストからユーザーが選択したラベル コントロールと同数のラベル コントロールを作成します。コントロールのコンテナは、Placeholder1 という PlaceHolder Web サーバー コントロールです。
セキュリティに関するメモ : Web ページのユーザー入力には、悪意のあるクライアントのスクリプトが含まれている可能性があります。既定では、ASP.NET Web ページは、ユーザー入力にスクリプトまたは HTML 要素が含まれていないことを検証します。詳細については、「スクリプトによる攻略の概要」を参照してください。
Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged Dim DropDownList1 As New DropDownList() Dim PlaceHolder1 As New PlaceHolder() Dim i As Integer Dim numlabels As Integer ' Get the number of labels to create. numlabels = CInt(DropDownList1.SelectedItem.Text) For i = 1 To numlabels Dim myLabel As Label = New Label() ' Set the label's Text and ID properties. myLabel.Text = "Label " & i myLabel.ID = "Label" & i PlaceHolder1.Controls.Add(myLabel) ' Add a spacer in the form of an HTML <br /> element Dim spacer As LiteralControl = New LiteralControl("<br />") PlaceHolder1.Controls.Add(spacer) Next End Sub
private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e) { DropDownList DropDownList1 = new DropDownList(); PlaceHolder PlaceHolder1 = new PlaceHolder(); // Get the number of labels to create. int numlabels = System.Convert.ToInt32(DropDownList1.SelectedItem.Text); for (int i=1; i<=numlabels; i++) { Label myLabel = new Label(); // Set the label's Text and ID properties. myLabel.Text = "Label" + i.ToString(); myLabel.ID = "Label" + i.ToString(); PlaceHolder1.Controls.Add(myLabel); // Add a spacer in the form of an HTML <br /> element. PlaceHolder1.Controls.Add(new LiteralControl("<br />")); } }
参照
処理手順
方法 : HTML サーバー コントロール プロパティをプログラムで設定する
方法 : ASP.NET サーバー コントロールのスタイル プロパティをプログラムで設定する
概念
ASP.NET Web サーバー コントロールのイベント モデル