【问题标题】:Using Page_Load and Page_PreRender in ASP.Net在 ASP.Net 中使用 Page_Load 和 Page_PreRender
【发布时间】:2012-01-21 16:19:22
【问题描述】:

我看到有些人在同一个 aspx 页面中使用 Page_Load 和 Page_PreRender。我能确切知道为什么我们需要在同一个 asp.net 页面中调用这两种方法吗?

请看下面的代码,

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            dprPager.ButtonClickPager += new EventHandler(dprPager_ButtonClickPager);

            if (!Page.IsPostBack)
            {
              InitPager();

            }
        }
        catch (Exception ex)
        {

        }

    }

    protected void Page_PreRender(object sender, EventArgs e)
    {
        erMsg.Visible = !string.IsNullOrEmpty(lblError.Text);
    }

【问题讨论】:

  • 您不需要同时使用这两种方法,是否有一个您无法理解的具体示例? Page_Load 首先被调用,然后Page_PreRender 将被调用。
  • 请检查我是否添加了代码。
  • 我正在尝试确定回发是由“添加”按钮服务器控件还是由页面刷新引起的,以便我可以在页面刷新时停止将记录插入到我的 asp:GridView 中。但是我在查看这里后找不到 Page PreRender 事件:aspalliance.com/… 我很遗憾不得不在这里发帖,因为 S.O 已经停止提出新问题:(

标签: asp.net


【解决方案1】:

这取决于您的要求。

页面加载:执行所有请求共有的操作,例如设置数据库查询。此时,树中的服务器控件被创建并初始化,状态被恢复,表单控件反映客户端数据。请参阅处理继承的事件。

Prerender :在渲染输出之前执行任何更新。在预渲染阶段对控件状态所做的任何更改都可以保存,而在渲染阶段所做的更改将丢失。请参阅处理继承的事件。

参考:控制执行生命周期 MSDN

尝试阅读

ASP.NET Page Life Cycle Overview ASP.NET

Control Execution Lifecycle

问候

【讨论】:

  • 为什么我不能将所有逻辑移至 PreRender?
【解决方案2】:

Page_Load 发生在 ViewState 和 PostData 被页面上创建的 ASP.NET 控件发送到所有服务器端控件之后。 Page_Init 是在 ViewState 和 PostData 恢复之前触发的事件。 Page_Load 是您通常进行任何页面范围初始化的地方。 Page_PreRender 是在将页面状态呈现为 HTML 之前您有机会处理的最后一个事件。 Page_Load 是要处理的更典型的事件。

【讨论】:

    【解决方案3】:

    实现 PreRender 而不是 Load 的一大要求是需要使用页面上的控件。在 Page_Load 上,控件未呈现,因此无法引用。

    【讨论】:

      【解决方案4】:

      处理 ASP.NET Web 表单在阶段中进行。在每个状态下都会引发各种events。如果您有兴趣将代码插入processing flow(在服务器端),那么您必须处理适当的页面事件。

      【讨论】:

        【解决方案5】:

        @BizApps 指出的主要区别在于 Load 事件发生在 ViewState 填充之后,而 PreRender 事件发生在稍后,在 Rendering 阶段之前,并且在所有单个子控件的操作事件处理程序已经执行之后。 因此,控件的操作事件处理程序所做的任何修改都应该在 PreRender 期间在控件层次结构中更新,因为它发生在之后。

        【讨论】:

          【解决方案6】:

          Page_LoadPage_PreRender 之间的主要区别在于,在 Page_Load 方法中,并非所有页面控件都已完全初始化(加载),因为尚未调用各个控件的 Load() 方法。这意味着树还没有准备好渲染。在Page_PreRender 中,您保证所有页面控件都已加载并准备好呈现。从技术上讲,Page_PreRender 是您在页面变成 HTML 流之前调整页面的最后机会。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-04-30
            • 1970-01-01
            • 2011-12-26
            • 1970-01-01
            相关资源
            最近更新 更多