【发布时间】:2009-11-03 21:08:49
【问题描述】:
我将用户控件添加到 ID 为 phCustomFields 的 PlaceHolder。当我想删除 phCustomFields 中的用户控件时,我调用 phCustomFields.Controls.Clear()。然而,在这样做之后,我的用户控件的 Page_Load 方法仍然被命中(我通过在用户控件中放置一个断点来验证这一点。)为什么我的用户控件的 page_load 方法仍然被调用?我认为一旦我调用 Clear() 方法,我的用户控件的实例就被删除并销毁了。
更新
这是一些演示我的问题的示例代码。通过在 HelloWorld.ascx 的 Page_Load 方法处设置断点并调试 Page.aspx,调试过程将在 HelloWorld.ascx 中的 Page_Load 方法处停止,这是我所期望的并且很好。但是,当我单击“Remove HelloWorld.ascx”按钮删除用户控件,然后单击“Do Nothing”按钮导致回发时,调试过程仍然在 HelloWorld.ascx 的 Page_Load 方法处停止。但是,这不应该发生,因为调用了 phTest 中的 Clear() 方法。
Page.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Page.aspx.cs" Inherits="WebApplication1.Page" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Control C = LoadControl("HelloWorld.ascx");
phTest.Controls.Add(C);
}
protected void Remove_OnClick(object sender, EventArgs e)
{
phTest.Controls.Clear();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button Text="Does nothing" runat="server" />
<asp:Button Text="Remove HelloWorld.ascx" OnClick="Remove_OnClick" runat="server" />
<asp:PlaceHolder ID="phTest" Visible="false" runat="server">
</asp:PlaceHolder>
</div>
</form>
</body>
</html>
HelloWorld.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="HelloWorld.ascx.cs" Inherits="WebApplication1.HelloWorld" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
int i = 0;
}
</script>
<b>Hello World</b>
【问题讨论】:
-
你能给我们看一点代码吗?
标签: asp.net user-controls