【问题标题】:Parent Page Load Event fires every time a User Control Event Fires每次触发用户控件事件时都会触发父页面加载事件
【发布时间】:2013-07-08 20:43:05
【问题描述】:

我有一个动态创建多个用户控件的 .aspx 页面,每个用户控件都有自己的代码,这些代码基于用户控件级别的多个事件触发。问题是,在特定用户控件中的事件触发之前,父页面Load 方法也会触发。因为每个控件都是动态添加的,所以这不是一个微不足道的处理量,因为必须重新添加每个控件。

我希望能够在不强制更新承载它的页面上的情况下触发 UserControl 事件。我尝试将整个用户控件放在 UpdatePanel 中,但用户控件中的回发仍然会强制为父级加载页面。

这里有一些测试代码省略了某些部分,并且以声明方式而不是编程方式添加了控件。

.ASPX 父页面

<%@ Page Language="vb" CodeBehind="MyParent.aspx.vb" %>
<%@ Register TagPrefix="uc" TagName="Control" Src="MyControl.ascx" %>

<form id="form1" runat="server">
    <asp:ScriptManager runat="server"></asp:ScriptManager>
    <asp:UpdatePanel runat="server">
        <ContentTemplate>
            <uc:Control ID="Control1" runat="server" />
        </ContentTemplate>
    </asp:UpdatePanel>
</form>

.ASCX 用户控制

<%@ Control Language="vb"  CodeBehind="MyControl.ascx.vb"  %>
<p>Control Added</p>
<asp:Button runat="server" Text="ForcePostBack"/>

【问题讨论】:

    标签: asp.net ajax vb.net


    【解决方案1】:

    这就是ASP.NET WebForms page life-cycle 的工作原理。回发控件将导致主机(读取:父)页面通过其Page_Load。如果您不喜欢这个模型,那么您应该考虑ASP.NET MVCclient-side 解决方案,您可以调用AJAX 来获取数据,然后通过模板逻辑进行客户端渲染。

    【讨论】:

      【解决方案2】:

      您能否通过使用像“IsFirstLoad”这样的 Session 变量来避免它,然后仅在 IsFirstLoad 为空(或真)时呈现 UC?

      此外,我发现在 Page_Init 中动态呈现的项目将通过 PostBack 持续存在,因此您不必重新呈现。不过,不知道这是否适用于 UC。

      【讨论】:

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