【问题标题】:what is the best way not to load UserControls on Page Load在页面加载时不加载用户控件的最佳方法是什么
【发布时间】:2012-01-31 15:40:39
【问题描述】:

我有一个一般性问题。我的页面有几个安静的“重”用户控件,每个控件都放置在多视图视图中。在 PageLoad 上,这些控件中的每一个都会初始化,从而导致不必要的数据库调用。我想要的是只加载视图设置为“活动”的控件。现在我在每个用户控件中使用公共布尔属性来设置是否绑定数据,但是有没有一种通用的方法可以做到这一点?

【问题讨论】:

  • 提供一个公共函数 DataBind 并在要显示 UserControl 时从页面调用它。一般情况下,UserControl 的 Page_Load 应该什么都不做。

标签: asp.net user-controls


【解决方案1】:

如果您真的不希望在每次加载/回发时 ASP.NET Page Life Cycle 中涉及 UserControls,请在需要时动态加载它们。

Dynamic Loading of ASP.NET User Controls

【讨论】:

    【解决方案2】:

    这就是我的做法(类似于您的解决方案)

    每个控件都实现了一种数据绑定方法。仅当显示它的视图为“活动”时才应调用此方法。 (就像你已经在服务器端做的那样)。 这些控件中的每一个都只包含一个 Literal,我从代码隐藏中将我的 HTML 呈现到其中。

    我也希望有更简洁的方式,但控件会调用它们的 OnLoad 等方法,即使它们是不可见的。据我所知,您必须执行此类数据绑定操作或手动设置属性的值。

    您不应重写 DataBind 方法,因为即使控件本身的 Visible 属性设置为 false,也会调用此方法。 (这就是我记得的方式,但您可以检查以确保)。更干净的方法可能是在覆盖的 DataBind 方法中检查您的属性,并且仅在将其设置为 true 时执行您的数据绑定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      相关资源
      最近更新 更多