我有一个用户控件,它是一个图像按钮。 我希望动态添加该控件" n"在我的网页上的时间。 " N"来自数据库。 我试过这段代码: 在" aspx":
<%@ Register TagPrefix="uc" TagName="imgbtn" Src="~/components/seatfromdb/usercontrol/UC_imgbutton.ascx" %>
.........................................
//some code goes here
.......................................
<uc:imgbtn ID="uc_imgbtn"
runat="server"
/>
&#34; cs&#34;:
for(int i=0;i<5;i++)
{
UserControl uc = new UserControl();
uc = uc_imgbtn;
//uc.Attributes.Keys = "~/images/buttonorange.png";
//uc.ID = "uc" + i.ToString();
//uc.Height = 30;
plhdr_seat.Controls.Add(uc);
plhdr_seat.Controls.Add(new LiteralControl("<br />"));
}
但是控制&#34; uc&#34;只添加了一次页面。为什么? 请帮我这个代码。
答案 0 :(得分:0)
这是因为您始终将uc_imgbtn
分配给new UserControl();
。换句话说,您总是将相同的现有控件分配给plhdr_seat.Controls
集合。
查看this link上的注意了解详情:
Control只能分配给一个Control.ControlCollection 时间。如果Control已经是另一个控件的子控件了 在将控件添加到另一个控件之前从该控件中删除。
如果您想每次向uc_imgbtn
集合添加新的plhdr_seat.Controls
控件,则应将代码更改为:
UserControl uc = new UserControl(); // change this
uc = uc_imgbtn; // remove this
在第一行中,您必须确保正确初始化uc
控件。从我的代码中可以看出,这应该有效:imgbtn uc = new imgbtn();
答案 1 :(得分:0)
请勿创建UserControl
,请调用Page.LoadControl
方法获取UC_imgbutton
的新实例。
for(int i = 0; i < 5; i++)
{
UC_imgbutton uc = (UC_imgbutton)LoadControl("~/components/seatfromdb/usercontrol/UC_imgbutton.ascx");
//uc.Attributes.Keys = "~/images/buttonorange.png";
//uc.ID = "uc" + i.ToString();
//uc.Height = 30;
plhdr_seat.Controls.Add(uc);
plhdr_seat.Controls.Add(new LiteralControl("<br />"));
}