如何:以编程方式向 ASP.NET 网页添加控件
更新:2007 年 11 月
有时,在运行时创建控件比在设计时创建控件更可行。例如,假定有一个搜索结果页,您要在其中将以表的形式显示结果。由于不知道要返回多少项,因此您需要每个返回的项动态生成一个表行。
![]() |
---|
现有控件通常可以提供从动态创建控件中获得的功能。例如,Repeater、DataList 和 RadioButtonList 控件可以在页运行时动态创建行或其他控件元素。 |
要通过编程向页添加控件,则必须有放置新控件的容器。例如,如果您打算创建表行,那么容器就是表。如果没有明显的控件用作容器,可以使用 PlaceHolder 或 Panel Web 服务器控件。
在某些情况下,可能需要既创建静态文本又创建控件。要创建静态文本,可以使用 Literal 或 Label Web 服务器控件。然后可以将这些控件像其他控件一样添加到容器中。有关运行时所创建控件的视图状态的信息,请参见动态 Web 服务器控件和视图状态。
![]() |
---|
通过编程方式将控件添加到 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 方法在特定位置放置新控件,例如在其他控件的前面。但是这将会在页中引入错误。有关详细信息,请参见动态 Web 服务器控件和视图状态。
下面的代码示例演示名为 DropDownList1 的控件的 SelectedIndexChanged 事件的事件处理程序。该处理程序创建的标签 (Label) 控件的数量和用户从下拉列表中所选的数量相同。这些控件的容器是名为 Placeholder1 的 PlaceHolder Web 服务器控件。
安全说明:
网页中的用户输入可能包括潜在有害的客户端脚本。默认情况下,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 />")); } }