我谷歌关于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上我们可以动态创建控件,更改或分配我们无法在page_Load或Init之后的MasterPage或Theme。
但是Page_PreRender是什么,我们只能在Page_PreRender中做些什么。
答案 0 :(得分:0)
这不是你在Page_PreRender中仅做什么的问题,你的控件之间可能存在依赖关系,只有在Page_Load中处理了所有事件后才会显现。
答案 1 :(得分:0)
Page_PreRender事件可用于指定对控件的html呈现的更改。 Load和PreRender之间的一个重要区别是Load在触发控件事件之前运行,而在控件事件之后调用PreRender。因此,如果基于您的控件事件代码,您想要更改输出html,您可以在PreRender事件中执行此操作。
另一个需要注意的重要事项是,Page对象会在Page对象上引发PreRender事件,然后以递归方式为每个子控件执行相同操作。单个控件的PreRender事件发生在页面的PreRender事件之后。因此,这为您提供了如何修改特定控件的呈现的额外功能。这在Page_Load中是不可能的。
如果你正在使用自定义/用户控件来控制渲染,那么也可以使用它。
答案 2 :(得分:0)
在Page_Load事件之后触发某些事件。有些是显而易见的,有些则不是。这是因为这些事件只能在重新创建之后(或者更确切地说在加载之后)执行。例如,如果您希望注册一个客户端脚本,那么好地方可能是Page_Render。或者,您可能有意在Page_Load中调用以验证控件的Page.validate方法可以理解为已在渲染阶段调用。
同样某些其他只在其相关控件准备好呈现时才能工作(对用户的浏览器进行完全处理)。