如何在Visible false的页面加载时停止执行UC

时间:2011-09-10 11:33:09

标签: .net asp.net .net-4.0

如果在容器页面上将UC设置为Visible false,我打算停止执行pageload。现在我达到以下逻辑

public class TestControl : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (this.Visible)
        {
            //do heavy operation

        }
    }
}

即我将在UC的Page load中检查控件是否可见false,如果为true,则只在那里进行操作。还有其他更好的方法吗?我的应用程序中有这么多UC。如果可见错误,是否存在一些停止执行UC页面加载的常用逻辑。

2 个答案:

答案 0 :(得分:3)

Control类的Visible属性仅确定是否呈现Control,但它对控件生命周期的其余部分没有影响。

来自MSDN

  

如果此属性为false,则不呈现服务器控件。在组织页面布局时,您应该考虑到这一点。如果未呈现容器控件,即使将单个控件的Visible属性设置为true,也不会呈现其包含的任何控件。 [...]

这是有道理的,因为通过这种方式,您可以拥有仍然执行特定操作的不可见控件。您也可以通过不将任何内容放入其中来实现此目的,但它们可能仍会呈现一些空格或换行符。将Visible设置为false是干净的方法。

如果Control不可见,我认为没有更好的方法来阻止代码的执行,但我认为你的解决方案足够干净。

作为替代方案,您可以将代码放入 OnPreRender 事件中,该事件仅在控件可见时触发。但请记住,这是Control Lifecycle中的后续步骤。

public class TestControl : System.Web.UI.UserControl
{
    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        // Your code here
    }
}

答案 1 :(得分:1)

UserControl.dispose()停止触发usercontrol page_load事件。