2

我在谷歌上搜索了 Page_preRender 我们如何使用 Page_PreRender 而不是 page_Load 或者我们不能使用 page_Load 并且必须使用 Page_PreRender 但我发现的每个地方的情况,

The point at which the objects are prerendered is the last time changes to the objects can be saved or persisted to viewstate. This makes the PreRender step a good place to make final modifications, such as changing properties of controls or changing Control Tree structure, without having to worry about ASP.NET making changes to objects based off of database calls or viewstate updates. After the PreRender phase those changes to objects are locked in and can no longer be saved to the page viewstate. The PreRender step can be overridden using OnPreRender”。

但我无法理解哪些更改是我们无法在 page_Load 中进行而必须在 PreRender 中进行的。

据我所知,在 Page_PreInit 上,我们可以动态创建控件,更改或分配 MasterPage 或 Theme,这是我们在 page_Load 或 Init 之后无法做到的。

但是 Page_PreRender 有什么我们只能在 Page_PreRender 中做的事情。

4

3 回答 3

0

这不是您只能在 Page_PreRender 中做什么的问题,您的控件之间可能存在依赖关系,这些依赖关系只有在 Page_Load 中处理完所有事件后才会变得明显。

于 2010-09-15T12:33:31.743 回答
0

Page_PreRender 事件可用于指定对控件的 html 呈现的更改。Load 和 PreRender 之间的一个重要区别是 Load 在触发控件事件之前运行,而 PreRender 在控件事件之后调用。因此,如果您想根据您的控件事件代码更改输出 html,您可以在 PreRender 事件中执行此操作。

另一个需要注意的重要事项是 Page 对象引发 Page 对象上的 PreRender 事件,然后递归地对每个子控件执行相同的操作。各个控件的 PreRender 事件发生在页面的 PreRender 事件之后。因此,这使您可以更好地利用如何修改特定控件的呈现。这在 Page_Load 中是不可能的。

如果您使用由您完成控件呈现的自定义/用户控件,也可以使用它。

于 2010-09-15T12:40:45.230 回答
0

在 Page_Load 事件之后触发某些事件。有些是明显的,有些则不是。这是因为这些事件只能在重新创建之后(或者更确切地说在加载之后)执行。例如,如果你想注册一段客户端脚本,最好的地方是 Page_Render。或者您可能故意在 Page_Load 中调用以验证控件的 Page.validate 方法可以理解为已在呈现阶段调用。

同样,某些其他仅在其关联控件准备好呈现时才起作用(为用户的浏览器完全处理)。

于 2010-09-15T13:01:41.780 回答