如果在容器页面上将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页面加载的常用逻辑。
答案 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事件。