Default.aspx
<asp:PlaceHolder runat="server" ID="ph1">
</asp:PlaceHolder>
Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
var ctl = LoadControl("Controls/UserControl.ascx");
ph1.Controls.Add(ctl);
}
UserControl.ascx
<h3>User control</h3>
<asp:Button ID="btn1" runat="server" OnClick="btn1_Click" Text ="Click me" />
UserControl.ascx.cs
protected void btn1_Click(object s, EventArgs e)
{
Response.Write("You clicked me, yay");
}
所有的工作都非常顺利。当我点击按钮时,我看到了“你点击了我,耶”的文字。
需要注意的是,如果您尝试在下拉控件的SelectedItemChanged事件处理程序中动态加载控件,则会失败,因为ASP.Net页面的生命周期方式。相反,您应该在页面的PageLoad事件中处理这样的控件创建,像下面这个例子一样。
Default.aspx
<asp:DropDownList ID="ddl1" runat="server" AutoPostBack="true">
<asp:ListItem Value="0" Text="--select a value--" />
<asp:ListItem Value="1" Text="User control 1" />
<asp:ListItem Value="2" Text="User control 2" />
</asp:DropDownList>
<asp:PlaceHolder runat="server" ID="ph1">
</asp:PlaceHolder>
Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
switch (ddl1.SelectedValue)
{
case "1":
var ctl = LoadControl("Controls/UserControl.ascx");
ph1.Controls.Add(ctl);
break;
case "2":
ctl = LoadControl("Controls/UserControl2.ascx");
ph1.Controls.Add(ctl);
break;
}
}
}