【发布时间】:2010-04-05 17:38:29
【问题描述】:
我有一个页面,我在其中动态加载用户控件,如下所示:
Default.aspx:
<cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</cc1:ToolkitScriptManager>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
Default.aspx.cs:
protected void Page_Load(object sender, EventArgs e)
{
var ctrl = LoadControl("~/UserCtrl1.ascx");
ctrl.ID = "ucUserCtrl1";
PlaceHolder1.Controls.Add(ctrl);
}
下面是UserCtrl1.ascx的代码
<asp:Label ID="Label1" runat="server"></asp:Label>
<asp:Button ID="Button1" runat="server" Text="Button1" OnClick="Button1_Click" />
<br />
<asp:PlaceHolder ID="PlaceHolder2" runat="server"></asp:PlaceHolder>
单击 Button1 时,我正在动态加载另一个用户控件
UserCtrl1.ascx.cs
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "UserControl - 1 button clicked!";
var ctrl = LoadControl("~/UserCtrl2.ascx");
ctrl.ID = "ucUserCtrl2";
PlaceHolder2.Controls.Add(ctrl);
}
下面是 UserCtrl2.ascx 的标记
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="Label2" runat="server"></asp:Label>
<asp:Button ID="Button2" runat="server" Text="Button2" OnClick="Button2_Click" />
</ContentTemplate>
</asp:UpdatePanel>
UserCtrl2.ascx.cs
protected void Button2_Click(object sender, EventArgs e)
{
Label2.Text = "UserControl - 2 button clicked!";
}
当我单击 UserCtrl1 中的 Button1 时页面加载后,单击事件会触发,我可以看到 Label1 文本。它还正确加载了 UserCtrl2,但是当我单击 UserCtrl2 中的 Button2 时,单击事件会触发,更糟糕的是,当我单击 Button2 两次时,UserCtrl2 控件会从页面中消失。我怎样才能解决这个问题?
【问题讨论】:
标签: c# asp.net user-controls