只有 page_load和page_init这些可以autoeventwireup

RenderControl只提供override

public override void RenderControl(HtmlTextWriter writer)
{
base.RenderControl(writer);
LogUtil.CreateLog(LogLevel.Message, "Page_RenderControl in ChangeMyPassword");
}

asp.net: what's the page life cycle order of a control/page compared to a user contorl inside it?

You should look at this ASP.NET Page Life Cycle Overview and this

Page: PreInit
Control: Init
Page: Init
Page: InitComplete
Page: PreLoad
Page: Load
Control: Load
Page: LoadComplete
Page: PreRender
Control: PreRender
Page: PreRenderComplete
Page: SaveStateComplete
Page: RenderControl
Page: Render
Control: RenderControl
Control: Unload
Control: Dispose
Page: Unload
Page: Dispose

ASP.NET Application and Page Life Cycle

https://www.codeproject.com/Articles/73728/ASP-NET-Application-and-Page-Life-Cycle

Page Init

This event happens in the ASP.NET page and can be used for:

  • Creating controls dynamically, in case you have controls to be created on runtime.
  • Any setting initialization.
  • Master pages and the settings.

In this section, we do not have access to viewstate, postedvalues and neither the controls are initialized.

Page Load

In this section, the ASP.NET controls are fully loaded and you write UI manipulation logic or any other logic over here.

This is the place where you will put any logic you want to operate on the controls. Like flourishing a combobox from the database, sorting data on a grid, etc. In this event, we get access to all controls, viewstate and their posted values.

PreRender

If you want to make final changes to the UI objects like changing tree structure or property values, before these controls are saved in to view state.

Render

If you want to add some custom HTML to the output this is the place you can.

It’s now time to send the output to the browser. If you would like to make some changes to the final HTML which is going out to the browser, you can enter your HTML logic here.

中文版的

asp.net页面事件执行顺序(轉)

Page life cycle with user control

FAQ: Sequence that events are raised for Pages, UserControls, MasterPages and HttpModules

Understanding the Page Life Cycle can be very important as you begin to build Pages with MasterPages and UserControls.

Does the Init event fire first for the Page, the MasterPage or the UserControl? 
What about the Load event?

If you make an incorrect assumption about the sequence that these
events fire, then you may end up with a page that simply doesn't behave
the way you had anticipated.

By running a simple test, we can see exactly when each event fires. 
Our test setup is composed of a Page, MasterPage, UserControl, Nested
UserControl and Button control as follows:

  • The Page is tied to the MasterPage
  • The UserControl is on the Page
  • The Nested UserControl is on the UserControl
  • The Button is on the Nested UserControl.
  • Clicking the Button calls the Page.DataBind method

Each event on these controls has been set to call
Debug.WriteLine as each event is raised.  In addition to the events that
get raised for regular pages, I've also set up an HttpModule and wired
up all of those events as well. The results in the Debug output
window of running this page and Clicking the Button
are as follows:

BeginRequest - HttpModule
AuthenticateRequest - HttpModule
PostAuthenticateRequest - HttpModule
PostAuthorizeRequest - HttpModule
ResolveRequestCache - HttpModule
PostResolveRequestCache - HttpModule
PostMapRequestHandler - HttpModule
AcquireRequestState - HttpModule
PostAcquireRequestState - HttpModule
PreRequestHandlerExecute - HttpModule

PreInit - Page

Init - ChildUserControl
Init - UserControl
Init - MasterPage
Init - Page

InitComplete - Page

LoadPageStateFromPersistenceMedium - Page

ProcessPostData (first try) - Page

PreLoad - Page

Load - Page
Load - MasterPage
Load - UserControl
Load - ChildUserControl

ProcessPostData (second try) - Page

RaiseChangedEvents - Page
RaisePostBackEvent - Page

Click - Button - ChildUserControl

DataBinding - Page
    DataBinding - MasterPage
    DataBinding - UserControl
    DataBinding - ChildUserControl

LoadComplete - Page

PreRender - Page
PreRender - MasterPage
PreRender - UserControl
PreRender - ChildUserControl

PreRenderComplete - Page

SaveViewState - Page
SavePageStateToPersistenceMedium - Page
SaveStateComplete - Page

Unload - ChildUserControl
Unload - UserControl
Unload - MasterPage
Unload - Page

PostRequestHandlerExecute - HttpModule
ReleaseRequestState - HttpModule
PostReleaseRequestState - HttpModule
UpdateRequestCache - HttpModule
PostUpdateRequestCache - HttpModule
EndRequest - HttpModule
PreSendRequestHeaders - HttpModule
PreSendRequestContent - HttpModule

I hope that you will find this information useful.

Complete Lifecycle of an ASP.Net page and controls

自己做的postback和事件的顺序测试

第一次加载出页面的时候

[INFO] 2019-05-16 10:52:30.026+08:00 - OnInit fired in login page - [6]

[INFO] 2019-05-16 10:52:30.031+08:00 - Page_Init fired in login page - [6]

[INFO] 2019-05-16 10:52:30.037+08:00 - Page_Load fired in login page - [6]

点击登录按钮之后,触发了post back,先加载Init,然后是Load,最后才是按钮click事件绑定的方法

[INFO] 2019-05-16 10:54:03.763+08:00 - OnInit fired in login page - [7]

[INFO] 2019-05-16 10:54:03.764+08:00 - Page_Init fired in login page - [7]

[INFO] 2019-05-16 10:54:03.767+08:00 - Page_Load fired in login page - [7]

[INFO] 2019-05-16 10:54:03.770+08:00 - btnLogin_Click fired in login page - [7]

自己做的page和control的事件顺序测试

user control中的代码

public ChangeMyPassword()
{
Init += ChangeMyPassword_Init;
}

这个是优先注册的

private void ChangeMyPassword_Init(object sender, EventArgs e)
{

LogUtil.CreateLog(LogLevel.Message, "ChangeMyPassword_Init");
}

下面这个是被动注册的,通过autoeventwireup=true延迟绑定的。所以执行顺序在,这个在上面那个后面

protected void Page_Init(object sender, EventArgs e)
{
LogUtil.CreateLog(LogLevel.Message, "Page_Init in user control");
}

[INFO] 2019-05-16 13:30:07.330+08:00 -program /LM/W3SVC/4/ROOT/MyApplication-2-132024582037055218 started. - [1]

[INFO] 2019-05-16 13:30:11.963+08:00 - ChangeMyPassword_Init - [10]

[INFO] 2019-05-16 13:30:11.967+08:00 - Page_Init in user control - [10]

[INFO] 2019-05-16 13:30:11.994+08:00 - Page_Init in login page - [10]

web forms page和control的生命周期life cycle交互,以及page生命周期中每个event中需要做什么事情的更多相关文章

  1. Atitit.web三大编程模型 Web Page Web Forms 和 MVC

    Atitit.web三大编程模型 Web Page    Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2.  ...

  2. Atitit.web三编程模型 Web Page Web Forms 和 MVC

    Atitit.web三编程模型 Web Page    Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2. W ...

  3. [重点翻译] ASP.NET 4.6的更新 -- 本文只摘录 Web Forms的部分

    原文出处:[重点翻译] ASP.NET 4.6的更新 -- 本文只摘录 Web Forms的部分 http://www.dotblogs.com.tw/mis2000lab/archive/2015/ ...

  4. Asp.Net复习篇之Asp.Net生命周期与Asp.Net页的生命周期

    Asp.Net生命周期与Asp.Net页的生命周期是一个比较重要的话题,有时可能似乎知道一些,但又说不出个所以然,而且时常把这两个概念混淆.现在也是该好好理清思路,把这两个概念搞懂. Asp.Net生 ...

  5. ASP.NET Web Forms 4.5的新特性

    作者:Parry出处:http://www.cnblogs.com/parry/ 一.强类型数据控件 在出现强类型数据控件前,我们绑定数据控件时,前台一般使用Eval或者DataBinder.Eval ...

  6. 运用模型绑定和web窗体显示和检索数据(Retrieving and displaying data with model binding and web forms)

    原文 http://www.asp.net/web-forms/overview/presenting-and-managing-data/model-binding/retrieving-data ...

  7. Asp.Net Web Forms/MVC/Console App中使用Autofac

    本来简单介绍了Autofac在Asp.Net Web Forms中的应用,后来又添加了mvc.控制台应用程序中使用Autofac,详情请看源码. ASP.NET Web Forms使用Autofac, ...

  8. asp.net应用程序生命周期和asp.net网页的生命周期

    一.asp.net应用程序生命周期 asp.net应用程序生命周期以浏览器向web服务器(比如IIS服务器)发送请求为起点,先后经历web服务器下的ISAPI(Internet Server Appl ...

  9. [转]Bootstrap 3.0.0 with ASP.NET Web Forms – Step by Step – Without NuGet Package

    本文转自:http://www.mytecbits.com/microsoft/dot-net/bootstrap-3-0-0-with-asp-net-web-forms In my earlier ...

随机推荐

  1. ubuntu16.04下配置caffe无GPU

    1. 安装依赖项  1 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5- ...

  2. maven冲突管理及依赖管理实践

    1.“最近获胜策略(nearest wins strategy)”的方式处理依赖冲突 Maven采用“最近获胜策略(nearest wins strategy)”的方式处理依赖冲突,即如果一个项目最终 ...

  3. HD-ACM算法专攻系列(21)——Wooden Sticks

    题目描述: AC源码: 此题考查贪心算法,解题思路:首先使用快速排序,以w或l按升序排序(注意相等时,应按另一值升序排序),这样就将二维变量比较,变为了一维的,排好序的一边就不需要去管了,只需要对未排 ...

  4. IOC-Castle Windsor映射

    Castle最早在2003年诞生于Apache Avalon项目,目的是为了创建一个IOC(控制反转)框架.发展到现在已经有四个组件了,分别是ActiveRecord(ORM组件),Windsor(I ...

  5. 个人对于React的Diff算法的一点疑问(待更新)

    本人对于Diff算法也并未做深入研究,只是大概的看过一些博文了解了些原理,但依然有了如下疑问 : 对于vdom所表示的对象中,若在该oldObj和newObj之间,发现一个元素节点所表示的子对象不见了 ...

  6. C++逐行读取文本文件的正确做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 之前写了一个分析huson日志的控制台程序,其中涉及到C++逐行读取文本文件的做法,代码是这样写的: ifstream ...

  7. ​Java面向对象的概念整理

    Java中一切皆是对象! 注意:8种基本数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备“对象”的特性:没有成员变量.方法可以被调用. 为解决8种基本数据类型不能当成Object类型(所有 ...

  8. NGUI 使用Grid自动排列UI

    1,NGUI->Create Grid 2,把需要排列的UI放到Grid下边,对Grid进行参数设置

  9. 优动漫PAINT安装教程

    优动漫PAINT是一款漫画.插画.动画绘制软件.其功能可分别满足画师对于插画.漫画和动画创作的针对性需求,是一款非常好用易上手的动漫绘图软件,本文来看使用软件第一步,如何安装优动漫PAINT. 步骤一 ...

  10. 再生龙恢复分区后修复引导或debian linux修复引导 三部曲

    先参考 sudo -imkdir /mntmount /dev/sda1 /mntgrub-install --force --no-floppy --root-directory=/mnt /dev ...