问题是这样的:
我在页面里有一个PlaceHolder容器,然后有一个Button;
<
form
id
="form1"
runat
="server"
>
< div >
< asp:PlaceHolder ID ="ucHolder" runat ="server" ></ asp:PlaceHolder >
</ div >
< div >
< asp:Button ID ="btnAddUC" runat ="server" Text ="Add User Control" />
</ div >
</ form >
< div >
< asp:PlaceHolder ID ="ucHolder" runat ="server" ></ asp:PlaceHolder >
</ div >
< div >
< asp:Button ID ="btnAddUC" runat ="server" Text ="Add User Control" />
</ div >
</ form >
当我点击Button的时候,PlaceHolder中动态加载一个UserControl,每点击一次按钮,多加载一个UserControl,如果已经加载的UserControl有值,需要保留原来的值。
好了,下面开始具体的实现
首先,我新建一个Aspx的页面和一个Ascx的用户控件,然后在Aspx页面的Page_Load事件中为Button添加Click事件;
Code
btnAddUC.Click += new EventHandler(btnAddUC_Click);
btnAddUC.Click += new EventHandler(btnAddUC_Click);
还需要定义一个变量变量 Count,保存到 ViewState 中,记录 UserControl 的个数
Code
int Count
{
get
{
if (ViewState["ControlCount"] == null)
ViewState["ControlCount"] = 1;
return (int)ViewState["ControlCount"];
}
set
{
ViewState["ControlCount"] = value;
}
}
int Count
{
get
{
if (ViewState["ControlCount"] == null)
ViewState["ControlCount"] = 1;
return (int)ViewState["ControlCount"];
}
set
{
ViewState["ControlCount"] = value;
}
}
按钮点击方法如下
Code
void btnAddUC_Click(object sender, EventArgs e)
{
Count++;
LoadUserControl(Count);
}
void btnAddUC_Click(object sender, EventArgs e)
{
Count++;
LoadUserControl(Count);
}
加载用户控件的方法
Code
void LoadUserControl(int index)
{
Control ctl = this.LoadControl("~/WebUserControl.ascx");
ctl.ID = string.Format("userControl_{0}", index);
this.ucHolder.Controls.Add(ctl);
}
void LoadUserControl(int index)
{
Control ctl = this.LoadControl("~/WebUserControl.ascx");
ctl.ID = string.Format("userControl_{0}", index);
this.ucHolder.Controls.Add(ctl);
}
这里注意,因为Asp.Net 的页面有一个Element Tree结构,会保存控件的状态的,所以加载的UserControl的ID要固定,就向上面 ctl.ID = string.Format("userControl_{0}", index); 每次加载控件的ID 都固定的
然后由于Asp.Net保存控件状态用的是ViewState,所以我们加载控件的实现需要在ViewState之后,我们放在页面的Page_Load事件中
Code
for (int i = 1; i <= Count; i++)
{
LoadUserControl(i);
}
for (int i = 1; i <= Count; i++)
{
LoadUserControl(i);
}
OK,这样就完成了
附:源代码