我看到有些人在同一个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);
}
答案 0 :(得分:27)
Page_Load
和Page_PreRender
之间的主要区别在于,在Page_Load方法中,并非所有页面控件都已完全初始化(加载),因为尚未调用单个控件Load()
方法然而。这意味着树还没有准备好渲染。在Page_PreRender
中,您保证所有页面控件都已加载并准备好呈现。从技术上讲,Page_PreRender
是您在转换为HTML流之前调整页面的最后机会。
答案 1 :(得分:25)
这取决于您的要求。
页面加载:执行所有请求共有的操作,例如设置数据库查询。此时,将创建并初始化树中的服务器控件,恢复状态,并且表单控件反映客户端数据。请参阅处理继承的事件。
Prerender:在呈现输出之前执行任何更新。可以保存在预渲染阶段对控件状态所做的任何更改,而在渲染阶段中进行的更改将丢失。请参阅处理继承的事件。
参考:控制执行生命周期MSDN
尝试阅读
ASP.NET Page Life Cycle Overview ASP.NET
此致
答案 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期间在控件层次结构中更新。