如何避免在aspx中初始化Web用户控件?

时间:2010-02-23 19:47:35

标签: asp.net

我有一个aspx页面,其中包含一个Web用户控件,如下所示。

<html>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:PlaceHolder ID="PlaceHolder1" runat="server">
            <uc1:WebUserControl Visible="false" ID="WebUserControl1" runat="server" />
        </asp:PlaceHolder>
        <asp:Label ID="Label1" runat="server" Text="This is visible"></asp:Label>
    </div>
    </form>
</body>
</html>

在上一页的Page_Load方法中,我为WebUserControl1设置了Visible = true / false(基于某些条件)。 WebUserControl1本身包含许多控件。但我不想初始化WebUserControl1中的控件。反正我们可以避免初始化WebUserControl1的ChildControls吗?

2 个答案:

答案 0 :(得分:1)

根据您的描述,听起来用户控件中正在进行的繁重工作是在用户控件的Init事件中完成的。我是否可以建议将重物从该事件移至可能的Load事件。然后,正如@Brian所指出的那样,你应该能够检查控件是否可见,如果是,则开始繁重的工作。

用户控件的代码隐藏:

protected void Page_Load(object sender, EventArgs e)
{
    if (this.Visible)
    {
        //do heavy lifting here
    }
}

如果你没有在是否抬起某种条件的情况下,你将永远抬起。

答案 1 :(得分:0)

控件将被添加到控件树中,除非您动态添加控件(这可能很麻烦),否则无法避免,但您必须处理后端逻辑检查。在您的用户控制代码中,您需要在尝试处理服务器端逻辑时检查Visible = true,并且只在true时处理。