欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET动态添加控件一例

程序员文章站 2024-03-06 11:32:13
第一次单击页面中有3个label,第二次单击有6个,第三次单击有9个,也就是每次单击要在上次的状态下再添加3个。 我的方法是,可以通过session来保存上次的状态,一种解...
第一次单击页面中有3个label,第二次单击有6个,第三次单击有9个,也就是每次单击要在上次的状态下再添加3个。
我的方法是,可以通过session来保存上次的状态,一种解法如下:
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>

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是为了测试之用,作用有二:一是帮助查看添加的位置是否正确,二是用于检测空回发时是否能维持上次的状态。