大家好我创建了一个用户控件并在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);
}
但是根据你的代码
,我无法看到回发事件在用户控件的页面加载时触发答案 0 :(得分:1)
当ASP.NET页面加载时,它以递归方式调用Load
集合中所有控件的Page.Controls
函数(请参阅this MSDN article on The ASP.NET Page Life Cylce的“生命周期事件”部分,具体而言“加载”事件)。在页面标记中包含UserControl将使其成为此集合的一部分,因此只要页面加载,就会触发load事件。
如果要避免这种情况,则需要动态地将UserControl添加到页面以响应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);
}
Panel的标记是这样的:
<asp:Panel id="yourPanelControl" runat="server" Height="200px" Width="300px">
</asp:Panel>