1

大家好,我已经创建了一个用户控件,并web.config使用一些扩展名注册了它,并在需要时在页面上调用它。当我使用它时,当页面加载时,用户控件也被加载,我的意思是用户控件的回发事件或页面加载事件根据网页中的操作发生。

有什么方法可以避免这种情况,即只有在加载时对该控件执行某些操作时,才应该启用或加载用户控件页面加载。

例如,我创建了一个用户控件并在我的表单上注册,这将在表单的按钮单击时加载,我只想在用户单击 Web 表单的按钮而不是在执行的每一项操作

Edit as per jadarnel27 answer

<%@ Register Src="~/UserControl1.ascx" TagName="TimeoutControl" TagPrefix="uc1" %>
<asp:Panel ID="yourPanelControl" runat="server" Height="200px" Width="300px">
        </asp:Panel>
<dx:ASPxButton ID="btn" Text="user" OnClick="btn_Click" runat="server">
        </dx:ASPxButton>

 protected void btn_Click(object sender, EventArgs e)
        {
            TimeoutControl tc = new TimeoutControl();
            yourPanelControl.Controls.Add(tc);
        }

但是我无法看到根据您的代码在用户控件的页面加载时触发回发事件

4

1 回答 1

1

当 ASP.NET 页面加载时,它会递归调用Load集合中所有控件的函数(请参阅有关 ASP.NET 页面生命周期的这篇 MSDN 文章Page.Controls的“生命周期事件”部分,特别是“加载”事件)。在页面的标记中包含 UserControl 将使其成为此集合的一部分,因此每当页面加载时都会触发 load 事件。

如果您想避免这种情况,您需要将 UserControl 动态添加到 Page 以响应 Button 的单击事件。例如,您可以在页面中包含某种面板,然后在单击按钮时将 UserControl 添加到该面板。

像这样的东西:

protected void yourButton_Click(Object sender, EventArgs e)
{
    // Create your UserControl
    yourUserControl uc = new yourUserControl();
    // Add it to the Panel you included in your markup
    yourPanelControl.Controls.Add(uc);
}

面板的标记将是这样的:

<asp:Panel id="yourPanelControl" runat="server" Height="200px" Width="300px">
</asp:Panel>
于 2013-05-17T19:53:56.253 回答