コントロールをデザイン時ではなく実行時に作成した方が実際的である場合もあります。たとえば、検索結果ページで結果をテーブルに表示することがあります。この場合、返される項目の数がわからないため、返される各項目について 1 つのテーブル行を動的に生成する必要があります。
コントロールをプログラムでページに追加するには、新しいコントロールのコンテナが必要です。たとえば、テーブルの行を作成する場合、コンテナはテーブルです。明確にコンテナとして機能するコントロールが存在しない場合は、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";
-
次の例に示すように、既にページにあるコンテナの 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 />"));
}
}
参照