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