在ASP.Net中使用Page_Load和Page_PreRender

时间:2011-12-16 02:19:43

标签: asp.net

我看到有些人在同一个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);
    }

6 个答案:

答案 0 :(得分:27)

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

答案 1 :(得分:25)

这取决于您的要求。

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

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

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

尝试阅读

ASP.NET Page Life Cycle Overview ASP.NET

Control Execution Lifecycle

此致

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

处理ASP.NET网络表单发生在阶段中。在每个州,提出了各种events。如果您有兴趣将代码插入processing flow(在服务器端),那么您必须处理适当的页面事件。

答案 5 :(得分:0)

@BizApps所指出的差异的主要观点是Load事件恰好在PreRender事件发生后,在渲染阶段之前,以及在所有单个子控件的动作事件处理程序已经执行之后填充。 因此,控件的操作事件处理程序所做的任何修改都应该在PreRender期间在控件层次结构中更新。