如何避免在aspx中初始化web用户控件?
我有一个aspx页面,其中包含一个web用户控件,如下所示。如何避免在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>
在上述页我设置Visible =真/假(基于一些条件)的WebUserControl1的Page_Load方法。 WebUserControl1本身包含很多控件。但我不想初始化WebUserControl1内的控件。无论如何,我们可以避免初始化WebUserControl1的ChildControls?
从你的描述来看,这听起来像是在用户控件的Init事件中完成的用户控件的繁重工作。我可以建议将这一事件的重要举措放到可能的Load事件上。然后,正如@布莱恩指出的那样,你应该能够检查控制是否可见并且如果是的话就开始繁重的工作。
代码隐藏用户控件:
protected void Page_Load(object sender, EventArgs e)
{
if (this.Visible)
{
//do heavy lifting here
}
}
如果你不把某种您是否不能解除的条件,你将永远解除。
我正在检查Page_Load中的Visible属性。但是,如果我的控制不可见,为什么它仍应执行其生命周期事件。 – Amitabh 2010-02-24 08:44:05
您可以将您的控制代码作为原始问题的一部分发布吗?我在这里做了太多猜测工作。不过,我认为你已经接近答案了。 – 2010-02-24 14:06:13
控件将被添加到控件树中,除非动态添加控件(这可能很痛苦),但是您必须处理后端逻辑检查。在您的用户控制代码中,当您尝试处理服务器端逻辑时,需要检查Visible = true,并且只有在处理为true时才处理。
它是如何知道_you_足以不初始化控件,但用户控件的开发人员不?如果用户控件想要初始化子控件,那么它期望它们被初始化,并且你最好让它做到这一点。 – 2010-02-23 19:50:42
@约翰:WebUserControl1是一个非常沉重的控制,我宁愿不让它初始化,如果它不可见。 – Amitabh 2010-02-23 20:13:16