学习asp.net动态添加控件的方法

发布时间:2019-08-17编辑:脚本学堂
有这样一个问题:3个DropDownList控件和1个按钮,每次单击按钮动态创建3个Label控件并从DropDownList获得值,然后添加到页面。

有这样一个问题:
3个DropDownList和1个按钮,每次单击按钮动态创建3个Label控件并从DropDownList获得值,然后添加到页面。
第一次单击页面中有3个Label,第二次单击有6个,第三次单击有9个,也就是每次单击要在上次的状态下再添加3个。
谁的小脑袋这么聪明呢,居然在控件上做这么大的文章,哈哈。

下面说说俺的想法,可以通过Session来保存上次的状态。
一种解法如下:
1、Test.aspx关键代码:
 

复制代码 代码示例:
<form id="form1" runat="server">
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server">
<asp:ListItem>a</asp:ListItem>
<asp:ListItem>b</asp:ListItem>
<asp:ListItem>c</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="DropDownList3" runat="server">
<asp:ListItem>A</asp:ListItem>
<asp:ListItem>B</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
<asp:Button ID="Button2" runat="server" Text="最后一个Button" />
</form>

2、Test.aspx.cs关键代码:
 

复制代码 代码示例:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["Panel1"] != null)
{
int index = this.Form.Controls.IndexOf(Panel1);
this.Form.Controls.RemoveAt(index);
Panel1 = Session["Panel1"] as Panel;
this.Form.Controls.AddAt(index, Panel1);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 3; i++)
{
Label label = new Label();
DropDownList ddl = this.FindControl("DropDownList" + (i + 1).ToString()) as DropDownList;
label.Text = ddl.SelectedValue;
Panel1.Controls.Add(label);
}
Literal br = new Literal();
br.Text = "<br/>";
Panel1.Controls.Add(br);
Session["Panel1"] = Panel1;
}

说明:
页面回发时,先记下Panel1在控件树中的位置,并移除它,然后从Session变量获取上次添加后的Panel1,并添加到控件树中原来的位置,在这基础上继续添加新的Label控件。
最后的Button是用来测试的,可以帮助查看添加的位置是否正确,也可以用于检测空回发时是否能维持上次的状态。

关于如何在asp.net中动态添加控件的问题,就会大家介绍到这。
脚本学堂,专心为您每一天。