如何:以编程方式向 ASP.NET 网页添加控件

更新:2007 年 11 月

有时,在运行时创建控件比在设计时创建控件更可行。例如,假定有一个搜索结果页,您要在其中将以表的形式显示结果。由于不知道要返回多少项,因此您需要每个返回的项动态生成一个表行。

kyt0fzt1.alert_note(zh-cn,VS.90).gif说明:

现有控件通常可以提供从动态创建控件中获得的功能。例如,RepeaterDataListRadioButtonList 控件可以在页运行时动态创建行或其他控件元素。

要通过编程向页添加控件,则必须有放置新控件的容器。例如,如果您打算创建表行,那么容器就是表。如果没有明显的控件用作容器,可以使用 PlaceHolderPanel Web 服务器控件。

在某些情况下,可能需要既创建静态文本又创建控件。要创建静态文本,可以使用 LiteralLabel Web 服务器控件。然后可以将这些控件像其他控件一样添加到容器中。有关运行时所创建控件的视图状态的信息,请参见动态 Web 服务器控件和视图状态

kyt0fzt1.alert_caution(zh-cn,VS.90).gif重要说明:

通过编程方式将控件添加到 Web 网页

  1. 创建控件的实例并设置其属性,如下面的示例所示:

    Dim myLabel As New Label()
    myLabel.Text = "Sample Label"
    
    Label myLabel = new Label();
    myLabel.Text = "Sample Label";
    
    kyt0fzt1.alert_note(zh-cn,VS.90).gif说明:

    控件通常在页的初始化阶段添加到页中。有关页阶段的详细信息,请参见 ASP.NET 页生命周期概述

  2. 将新控件添加到页上已有容器的 Controls 集合中,如下面的示例所示:

    Dim Panel1 As New Panel()
    Panel1.Controls.Add(myLabel)
    
    Panel Panel1= new Panel();
    Panel1.Controls.Add(myLabel);
    
    kyt0fzt1.alert_note(zh-cn,VS.90).gif说明:

    因为 Controls 属性是一个集合,您可以使用 AddAt 方法在特定位置放置新控件,例如在其他控件的前面。但是这将会在页中引入错误。有关详细信息,请参见动态 Web 服务器控件和视图状态

    下面的代码示例演示名为 DropDownList1 的控件的 SelectedIndexChanged 事件的事件处理程序。该处理程序创建的标签 (Label) 控件的数量和用户从下拉列表中所选的数量相同。这些控件的容器是名为 Placeholder1 的 PlaceHolder Web 服务器控件。

    kyt0fzt1.alert_security(zh-cn,VS.90).gif安全说明:

    网页中的用户输入可能包括潜在有害的客户端脚本。默认情况下,ASP.NET 网页验证用户输入是否不包括脚本或 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 服务器控件事件模型

其他资源

以编程方式设置 ASP.NET 服务器控件属性