【问题标题】:How to avoid Initialization of web user control inside aspx?如何避免在 aspx 中初始化 Web 用户控件?
【发布时间】:2010-02-23 19:47:34
【问题描述】:

我有一个包含如下 Web 用户控件的 aspx 页面。

<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 吗?

【问题讨论】:

  • 怎么知道不初始化控件,而用户控件的开发者却不知道呢?如果用户控件想要初始化子控件,那么它希望它们被初始化,你最好让它这样做。
  • @John:WebUserControl1 是一个非常重的控件,如果它不可见,我宁愿不让它初始化。

标签: asp.net


【解决方案1】:

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

用户控制的代码隐藏:

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

如果你不为你是否举起某种条件,你就会一直举起。

【讨论】:

  • 我正在检查 Page_Load 中的 Visible 属性。但是,如果我的控件不可见,为什么还要执行其生命周期事件。
  • 您能否将您的控制代码作为原始问题的一部分发布?我在这里做了太多的猜测工作。不过,我认为您已经接近答案了。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多