Asp.Net底层解析(三)——ASPX页面的生命周期详解

用示波器抓取同步Buck自举电容波形:从充电回路到SW节点振铃的完整分析 本文通过实测TI TPS54561和MPS MPQ4572同步Buck芯片,详细解析了自举电容在充电、维持和放电三个工作阶段的波形特征。重点揭示了电感泄放回路与充电回路重叠时,在SW节点引发的振铃现象及其产生机理,并提供了串联阻尼电阻等有效的工程抑制方法。文章结合示波器实测,为硬件工程师提供了从波形观测到问题调试的完整实践指南。 阅读详情

    前言:个人认为,对于页面生命周期的理解是开发人员在ASP.NET领域做好做深的前提。当然,因为微软已经将ASP.NET封装得很简单了,所以对于只有基本html&javascript的初学者来说也很容易上手,这对于初入门者来说无疑是一件好事。何况如果仅仅要求会使用的话,何必要知道太多的深层次的技术细节?就算需要知道,也无需一开始,等到有了一定的使用经验再去了解,无疑会事半功倍。然而,当使用ASP.NET达到一定经验之后,开发人员就会思考怎样对代码进行有效的优化,怎样提高代码的执行效率,而不是完成任务就行了。只有了解ASP.NET的底层实现原理,才能做到知己知彼,兵来将挡,而页面生命周期我认为就是ASP.NET的核心实现机制。

一,一个简单的对比示例

    页面生命周期总体理解起来其实很容易,说白了就是在客户端提出了一个页面请求之后,服务器端将ASPX页面源代码转化为正确的HTML和JS代码的整个过程。服务端在转化的过程中当然不是调用一两个方法就能解决了的,是经历被设计好的若干个阶段,一步一步完成的,且各个阶段的功能很明确彼此是承前启后的关系。这些阶段大体上可以分为:初始化、加载、回发事件处理、呈现、卸载等等。关于这些阶段的具体细节本文将在后面说明,现在先来看一个简单的从整体上反映页面生命周期的实例(页面周期每达到一个事件时,就往页面中写入一些字符串),新建一个空页面,并在后台编写以下代码:

protected void Page_PreInit(object sender, EventArgs e)
{   //这里设置断点
    Response.Write("执行Page_PreInit<br/>");
}
protected void Page_Init(object sender, EventArgs e)
{   //这里设置断点
    Response.Write("执行Page_Init<br/>");
}
protected void Page_InitComplete(object sender, EventArgs e)
{   //这里设置断点
    Response.Write("执行Page_InitComplete<br/>");
}
protected void Page_PreLoad(object sender, EventArgs e)
{   //这里设置断点
    Response.Write("执行Page_PreLoad<br/>");
}
protected void Page_Load(object sender, EventArgs e)
{   //这里设置断点
    Response.Write("执行Page_Load<br/>");
}
protected void Page_LoadComplete(object sender, EventArgs e)
{   //这里设置断点
    Response.Write("执行Page_LoadComplete<br/>");
}
protected void Page_PreRender(object sender, EventArgs e)
{   //这里设置断点
    Response.Write("执行Page_PreRender<br/>");
}
protected void Page_PreRenderComplete(object sender, EventArgs e)
{   //这里设置断点
    Response.Write("执行Page_PreRenderComplete<br/>");
}
protected void Page_SaveStateComplete(object sender, EventArgs e)
{   //这里设置断点
    Response.Write("执行Page_SaveStateComplete<br/>");
}
protected void Page_Unload(object sender, EventArgs e)
{   //这里设置断点
    //这里是页面卸载阶段,不能使用Response.Write方法,一般该事件内执行释放本页面控制的系统资源
} 

     如果在每个方法的内部都设置了断点,那么当运行该页面后会发现,断点的触发是从顶部往底部依次执行的,触发一个事件之后再触发下一步事件,有条不紊,最终得到页面效果如下截图所示:

    上面的示例是每次页面(无论是首次请求还是PostBack)的请求都要触发的一系列事件,而当请求为PostBack时,会在Page_Load事件与Page_LoadComplete事件之间触发引起本次PostBack的控件对应的事件,在上面的示例上进行简单的修改,前台页面添加Bot同控件,代码如下:

<form id="form1" runat="server">
<asp:Button ID="aspbtn_TestPostBack" runat="server" Text="点击提交" 
    onclick="aspbtn_TestPostBack_Click" />
</form>

    后台代码与上面的示例一致,只是添加了Button控件的Click事件对应的方法,添加的方法如下:

//这里是Button的Click事件
protected void aspbtn_TestPostBack_Click(object sender, EventArgs e)
{
    Response.Write("执行Button控件的Click事件<br/>");
}

    首次运行页面得到结果与上次示例一致,而当点击按钮产生PostBack时,发现在Page_Load事件与Page_LoadComplete事件之间执行了按钮的事件,即aspbtn_TestPostBack_Click方法,得到的结果截图如下:


二,页面生命周期详解

    在说明本节主要内容前,先来用VS的对象浏览器查看Page类的基本成员,其中事件列表如下:


    如上图所示,从Init到Unload共有10个事件,这写就是页面生命周期过程中执行的顺序事件,而像Error(发生未处理的异常时执行,可用Page_Error形式编写)、AbortTransaction(事务处理被终止)等等是页面在满足特定条件下才会触发的事件,因此本篇文章后续都不会再涉及。

    本文所谓页面生命周期的阶段,就是从触发一个事件到触发下一个事件之间的运行时方法。根据这种划分方法,对页面生命周期的各阶段主要内容进行较详细的说明:

    1,启动阶段:设置页面基本属性,如 Request 和 Response。在此阶段,页面还将确定请求是回发请求还是新请求,并设置 IsPostBack 属性。
    2,预初始化阶段(启动阶段完成到触发PreInit事件):设置页面一些最基本的特性,如加载个性化信息和主题、运行时Culture。
    3,初步化阶段(触发PreInit事件到触发Init事件):根据页面的服务器标签及其属性设置,生成各个服务器控件的实例和给这些服务器控件的实例的属性进行赋值。(这里值得注意的是,服务器控件的大多数属性都是使用ViewState存储的,这时这些属性值将存入ViewState,但因为本阶段的赋值行为优先于ViewState的TrackViewState被调用,所以这些视图的值都将不会存入最终呈现的视图状态隐藏字段中,具体说明请参考我的关于视图状态的博客文章)
    4, 完成初始化阶段(触发Init事件到触发InitComplete事件):这是一个典型的过渡阶段,该阶段的结束标志整个初始化阶段的完成。该阶段内只调用一个方法,及ViewState的TrackViewState方法,开启对视图状态更改的跟踪。(注意:在1、2、3阶段对ViewState的赋值都不会记录到视图状态变更,因此都不会保留视图状态,下次PostBack将丢失;而从4阶段到后续阶段中调用SaveViewState之前所有视图状态的赋值都会保留状态。)
    5,预加载阶段(触发InitComplete事件到触发PreLoad事件):这里要加载的对象主要包括视图状态值、控件状态值以及回传数据(通过表单传递的所有值,实际上视图状态值和控件状态值本质上都是表单传值)。页面方法调用LoadViewState、LoadControlState、ProcessPostData,服务器控件对应调用LoadViewState和实现IPostBackDataHandler接口的LoadPostData方法,仅从上面两个方法名称中就可以判断出它们的功能。
    6,加载阶段(触发PreLoad事件到触发Load事件):这个阶段是一个标志阶段,该阶段结束后将进入页面及各个控件的Load事件。
    7,完成加载阶段(触发Load事件到触发LoadComplete事件):先调用Page的OnLoad方法,然后递归调用各个服务器控件的OnLoad方法;如果是PostBack,调用RaisePostBackEvent,即调用引起该Postback的控件的方法。这个一个重要的中间阶段,这时服务器控件和页面已经加载完毕(主要指各个属性都已经初始化赋值),可以按照需求对Page和这些控件进行重新逻辑处理,所以大多数的页面后台代码都是写在这个阶段并执行的。
    8,预呈现阶段(触发LoadComplete事件到触发PreRender事件):这也是一个标志阶段,标志各个控件都即将通过调用PreRender方法。
    9,预呈现完成阶段(触发PreRender事件到触发PreRenderComplete事件):先调用Page的PreRender方法,然后递归地调用各个服务器控件内的PreRender方法。在服务器控件编程中,PreRender是非常重要的方法,因为可在该方法内控件最终呈现的内容进行最后更改。
    10,保存状态阶段(触发PreRenderComplete事件到触发SaveStateComplete事件):这个阶段用于页和所有控件保存视图状态和控件状态,调用SaveViewState(Private)保存视图状态,调用SaveControlState(Private)保存视图状态。
    11,呈现阶段(触发SaveStateComplete事件之后):该阶段用于最终生成html代码,先调用Page的Render方法,然后递归调用服务器控件的Render,最终组合成完整的html代码。这个阶段是服务器控件完成任务的表现阶段,就像是蚂蚁们先出去找食物,最后回到蚁巢将食物拿出来一样,每个控件都拿出自己特定的“工作成果”。
    12,清理阶段:服务器控件调用完Render方法之后,就会调用Unload方法,该方法内部执行最后清理,如关闭控件特定数据库连接等等操作,所有服务器控件都清理完之后,再调用Page的Unload,同样也是用于执行最后清理工作,当然还可以做一些额外的项纪录操作历史等等自定义类的工作。最后,Page和服务器控件的实例都将被.NET的垃圾回收器回收,页面和控件在呈现阶段生成的文本将形成字符流响应给客户端。需要注意的是:在这个阶段,页及其控件已被呈现,不能再使用如Response.Write的呈现方法来对响应文本流做进一步修改了。

三,服务器控件生命周期详解

    所有服务器控件的基类都可以追溯到System.Web.UI.Control类,和页面一样,也先通过对象浏览器查看Control类的事件成员,截图如下:


    可以看到,与Page相比,Control只有Init、Load、PreRender及Unload这四个“常务”周期事件(DataBinding为特定条件事件,Disposed与Unload功能基本相似)。从执行角度上看,服务器控件的生命周期是“依附于”页面生命周期的,即服务器控件内的方法是被页面周期过程中调用才导致服务器控件周期的生长。

    一般的ASP.NET开发者对服务器控件的生命周期不太关注,也无需关注,只要会正确使用就OK了。而对于服务器控件开发者而言,对服务器控件的生命周期的知识是至关重要的,在开发特定控件时,既要保证正确又要保证效率,还要保证在对控件设置尽量简略的基础上提供尽量高的适用度。因此,在我看来,开发一个复杂而优秀的服务器控件的难度要比开发一个逻辑复杂度相近的ASPX页面要困难许多。

    本节将分阶段简单介绍服务器控件生命周期,因为服务器控件生命周期与页面生命周期是“互动的”,因此下面提到的某些方法和事件可能已经在页面生命周期介绍中就已经涉及:

    1,  初始化阶段:
        A, 根据ASPX页面上的设置生成该控件的实例,并给相应的属性进行赋值,所有服务器控件都完成初始化之后,页面将调用TrackViewState方法以最终视图状态的赋值。
       B, 如页面上<asp:ButtonID="aspbtn_TestPostBack" runat="server" Text="点击提交"/>的代码将导致生成System.Web.UI.WebControls.Button类的初始化,并设置属性ID=“aspbtn_TestPostBack”和属性Text=” 点击提交”。
       C, 该阶段完成之后,将触发Init事件。
       D, 可通过重写(override)OnInit方法或者给Init事件绑定方法来执行当初始化阶段完成后需要执行的代码。
   2,  加载阶段:
       A, 该阶段将加载视图状态、控件状态和回传数据,服务器控件根据这些数据重新给属性赋值。
       B, 如回传的视图状态值中包括Label1服务器控件的Text为”””text1”,那么在本阶段Label1控件的Text属性将被重新赋值为””text1”,并且因为页面的TrackViewState方法已经在初始化阶段被调用,所以这时Text属性的视图状态值将被添加到最终的视图状态输出字符流中。
       C, 这里需要注意的是:并不是所有控件的所有属性都是使用视图状态保存的,像TextBox的Text属性实现过程是这样的:获取PostBack回传的TextBox呈现的Input标签的value值,然后给Text赋值,这时Text中的视图状态ViewState[“Text”]会变成“dirty”,但在SaveViewState方法中将会调用this.ViewState.SetItemDirty("Text", false)来手动去除Text视图状态的“Dirty”标志。
       D, 该阶段完成之后,将触发Load事件。
       E,  可通过重写(override)OnLoad方法或者给Load事件绑定方法来执行当加载阶段完成后需要执行的代码。
   3,  处理回发事件RaisePostDataChangedEvent:
       A, 只有该服务器控件实现了IPostBackDataHandler接口,且本次请求为PostBack时才执行该方法。该接口用于当控件的关键属性发生变化时需要执行的代码,如TextBox控件的OnTextChanged和CheckBox控件的OnCheckedChanged。
       B, 执行过程是:如果控件状态因回发而更改,则该控件的LoadPostData()返回true;否则返回false。页面跟踪所有返回true的控件并在这些控件上调用RaisePostDataChangedEvent()。例如,当因为TextBox控件的OnTextChanged事件而触发的PostBack,那么该TextBox控件的LoadPostData()方法将返回true,页面调用TextBox控件的LoadPostData方法发现为true时就会调用TextBox控件的RaisePostDataChangedEvent方法。
   4,  处理回发事件RaisePostBackEvent:
       A, 这个方法与RaisePostIataChangedEvent类执行情况类似,都是用于请求为PostBack时,执行引起本次PostBack的控件对应的事件。
       B, 只有该服务器控件实现了IPostBackEventHandler接口,且本次请求为PostBack时才执行该方法。该接口用于由于对控件的某些操作导致Postback后需要执行的代码,最典型的就是Button控件的OnClick。
       C, 这里可能需要解释的就是如何找到这个引起PostBack的控件了。有两种情况,一种是像Button控件(默认属性设置)转化成类型为submit的input标签,本身就能引起PostBack不需要额外的方法;另一种是需要借助__doPostBack(你懂的)方法实现,需要传入__EVENTTARGET(控件ID)和__EVENTARGUMENT(事件参数)则两个参数。对于第二种情况,页面是很容易找到引起PostBack的控件的,只需要根据str = postData["__EVENTTARGET"]调用FindControl(str)就OK了;而对于第一种情况则稍微复杂一下,需要“曲折”地使用注册机制,通过调用Page.RegisterRequiresRaiseEvent(IPostBackEventHandler control)函数实现。例如Button控件引起的PostBack,Page会在ProcessPostData方法中对回传的字符串依次通过FindControl方法尝试找到控件,如果找到控件并且该控件实现了IPostBackEventHandler,则调用Page.RegisterRequiresRaiseEvent对该控件进行注册。
       D, 查找这个目标控件的顺序是,先查找Page.RegisterRequiresRaiseEvent注册的控件,如果有则将该控件确定为目标控件;如果没有,则通过__EVENTTARGET参数查找目标控件。
       E,  找到这个目标控件之后就简单了,只需要页面的完成加载阶段调用这个控件的RaisePostBackEvent方法就OK了。
   5,  预呈现阶段:
       A, 一般此阶段用于完成在控件保存视图状态和控件状态和最终呈现之前所需要的任何工作。
       B, 该阶段完成之后,将触发PreRender事件。
       C, 可通过重写(override)OnPreRender方法或者给PreRender事件绑定方法来执行当预呈现阶段完成后需要执行的代码。
   6,  保存状态阶段SaveViewState:
       A, 该阶段用于保存服务器控件内的所有视图状态和控件状态。
       B, 保存视图状态的“原则”是:所有被标志为“Dirty”的键/值才会加载到视图状态最终输出流中。
       C, 控件状态的保存与视图状态类似,但有一个最大地区别就是,控件状态不能被禁止,而视图状态可以,目的在于让服务器控件开发者更好地控制该控件的可靠性(不会因为页面开发者禁止了视图状态而使控件变的不可用)。
   7,  呈现阶段:
       A, 生成呈现给客户端的输出,可通过重写 Render()方法使其在输出流上自定义标记文本。
       B, 各个服务器控件将被“解析”为html代码,最终与整个ASPX页面组合成完整的HTML文本流,并返回给客户端。
    8,  清理阶段:
       A, 与页面生命周期的清理阶段类似,执行最后清理工作,如关闭控件特定数据库连接等等操作。
       B, 之后该服务器控件的实例将被垃圾回收器回收。


四,页面生命周期与服务器控件生命周期综合分析

    经过对ASP.NET的生命周期的较详细了解后,不得不承认,微软在ASP.NET上的设计是非常精妙的,从ASPX页面源代码经过页面周期、各个服务器控件的生命周期,最终转化为html代码。这些生命周期的各个阶段功能相对独立、明确,ASP.NET开发者可以通过在特定阶段添加相关代码,以达到特定的目的。下面将页面生命周期与服务器控件生命周期在一张图上(从MSDN中复制)综合展示:

    从上面的示图可以教完整地反映整个页面生命周期(控件的生命周期包含在页面周期之中)的执行流程,调用某些方法之后触发对应的生命周期事件,标志开始进入下一个生命周期阶段。






YOLO26涨点改进 | 检测头Head创新改进篇 | 利用DynamicConv高效动态卷积改进YOLO26检测头,DyHead通过增强检测头操作,轻量化改进、提高模型目标检测的精度 YOLO26作为新一代轻量化目标检测模型的代表,凭借精简的Backbone架构、高效的特征融合 Neck 设计,在实时检测场景(如嵌入式设备、边缘计算)中展现出优异的性能,成为工业落地与科研入门的优选模型。但在实际应用中,YOLO26原生检测头仍存在核心瓶颈:采用固定参数卷积核,无法根据输入特征的目标尺度、纹理差异动态调整卷积权重,导致多尺度目标适配不足、复杂背景下特征利用率低,且传统改进方案往往难以平衡“精度提升”与“轻量化”,要么精度提升有限,要么大幅增加参数量、拖累推理速度。 阅读详情

相关推荐

CAN接受和发送失败的原因有哪些---之前调试MCP2515驱动时,数据一直发不出去,三个发送邮箱都被占满.至今未解决,读寄存器-总线错误

0.CAN总线错误分析与解决–讲的最精辟的放在最前面 我们知道CAN总线上的每个节点往总线上发送数据的同时会同时读取总线上的数据,并与自己发送的数据作对比。—CAN仲裁??? CAN总线错误分别有发送和接收错误计数,计数达到一定的累计以后就会产生CAN BUS OFF, 这说明CAN总线上出现了严重的错误。如下图CAN总线产生错误后的状态转换机制 如果出现了BUS OFF,总线上的节点需要做一些动作,例如重启CAN控制器或是重新上电,但是这些都只是一些补救措施,最根本的还是需要找到引起BUS OFF的根源

dianqicyuyan的博客 2万+

转贴:Aspx页面的生命周期

web2.0以后,页面引入了MasterPage的概念,页面的生命周期也越来越复杂,页面大抵可以分为MasterPage,MasterPageControl,page,pageControl四个部分,他们的生命周期为:MasterPageControl Init 事件。转自:http://www.cnblogs.com/sleeping/archive/2008/01/15/1039196.htm

Scott Howard的专栏 1312

学习笔记9--智能驾驶的功能安全设计之功能安全设计

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》。此专栏是关于《自动驾驶系统设计及应用》书籍的笔记.

FUXI_Willard 1795

Page 的生命周期学习小结(翻译兼笔记)

Page 的生命周期学习小结(翻译兼笔记)原文链接:Page Events: Order and PostBack作者:Paul Wilson翻译:木野狐初始化(Initialization)页面被请求时,第一个被执行的总是构造函数(constructor). 你可以在这里初始化很多自定义属性或对象。不过这里有一些限制,因为 page 还没有被完全初始化。特别地,你必须使用 HttpC

木野狐@优快云 Blog 1688

Vivado实战:从零封装AXI-Lite接口的呼吸灯IP核

本文提供了一份详细的Vivado实战指南,手把手教你如何将Verilog编写的呼吸灯模块封装成带AXI-Lite接口的IP核。内容涵盖从创建IP框架、编写核心逻辑、连接AXI总线到在ZYNQ系统中调用并编写C程序进行软硬件协同测试的完整流程,是掌握FPGA软硬件协同设计的关键实践。

weixin_29233333的博客 598

《手把手教你YOLOv9实战》,改进专栏目录

为了提供友好的操作效果,本专栏将会手把手搭建可视化界面,我将用PyQt5 搭建一个可视化界面,可视化界面能够实现基本的图像加载与检测功能,如支持视频、摄像头,还支持更换不同的 YOLOv9 模型,并适应不同领域(如口罩检测系统、人脸检测系统、工业缺陷检测系统等),界面灵活、功能强大。通过YOLOv9加以改进设计,形成新的算法框架,一起水科研和论文,专栏会一直持续更新中,本专栏适合目标检测、分割、分类。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2156

Aspx 页面生命周期

ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤。这些步骤包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行 呈现。了解页的生命周期非常重要,这样就能在合适的生命周期阶段编写代码,以达到预期效果。此外,如果开发自定义控件,则必须熟悉页生命周期,从而正确地 初始化控件,使用视图状态数据填充控件属性以及运行所有控件行为逻辑。(控件的生命周期基于页的生

cuivivid的专栏 917

基于PChmi.dll的PLC报警显示和记录(C#)

本文介绍了如何使用C#编写基于PChmi.dll的程序,实现PLC报警的显示和记录功能。通过订阅PLC的报警事件,我们可以实时显示报警信息,并通过日志文件记录报警历史。PLC(可编程逻辑控制器)在工业自动化领域中扮演着重要的角色,而报警显示和记录是PLC应用中常见的需求。本文将介绍如何使用C#编写基于PChmi.dll的程序,实现PLC报警的显示和记录功能。当然,这只是实现报警显示和记录的基本框架,具体的实现方式可能因不同的PLC和HMI库而有所差异。你需要根据你所使用的具体库和设备进行相应的调整和修改。

ByteLegend的博客 1673

简要描述ASP.NET的页面生命周期

考点】 ASP.NET页面生命周期的理解。 【出现频率】 ★★★★☆ 【解答】 当ASP.NET运行库收到某个*.aspx的访问请求后,将开始这个页面的生命周期。首先,ASP.NET运行库将调用这个页面类的默认构造函数,对应的页面对象将在内存中创建,这个页面类即为*.cs代码文件中定义的类(派生于System.Web.UI.Page类)。页面对象创建后,将触发一系列的事件,这些事件的过程

wenjie315130552的专栏 2115

Silly Tavern酒馆ai角色卡与世界书导入超详细教程!

前几天,我在设置 Silly Tavern 的时候,想导入一个喜欢的角色卡,结果发现不少朋友其实已经下载好了角色资源,但却不知道怎么正确导入使用。这篇文章就作为一份完整的新手向教程,一步步教你如何在 Silly Tavern 中导入角色卡、世界书,并实现与 AI 角色的真实互动。如果你是第一次接触这个功能,建议先收藏慢慢看~点击菜单栏上的 图标,打开角色界面。初始状态下,你应该只看到默认角色 Seraphina。你可以先点击她的头像尝试聊天,也可以导入自己喜欢的角色。点击导入按钮,选择你下载好的角色卡(通

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2万+

YOLOv11改进 | Conv篇 | DWRSeg扩张式残差助力小目标检测 (附创新修改后的C3k2DWRSeg)

本文内容给大家带来的DWRSeg中的DWR模块来改进YOLOv11中的C2f和Bottleneck模块,主要针对的是小目标检测,主要创新点可以总结如下:多尺度特征提取机制的深入研究和创新的DWR模块和SIR模块的提出这种方法使得网络能够更灵活地适应不同尺度的特征,从而更准确地识别和分割图像中的物体。DWRSeg的基本原理和框架,并且能够在你自己的网络结构中进行添加DWRSeg需要增加一定的计算量一个DWR模块大概增加0.4GFLOPsYOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备。

Snu77的博客 4186

Asp.net页面的生命周期

ASP.NET 页面对象模型ASP.NET Web 页面生命中的一天 Dino EspositoWintellect2003 年 8 月适用于:    Microsoft® ASP.NET摘要:了解为 ASP.NET Web 页面建立的事件模型,以及 Web 页面转变为 HTML 过程中的各个阶段。ASP.NET HTTP 运行时负责管理对象管道,这些对象首先将请求的 URL 转换

海峰的专栏 8366

Lammps实现随机粗糙度表面沸腾

Lammps实现随机粗糙度表面沸腾前言 前言

Rockyoung 2703

aspx页面的生命周期

ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤。这些步骤包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现。了解页的生命周期非常重要,这样就能在合适的生命周期阶段编写代码,以达到预期效果。此外,如果开发自定义控件,则必须熟悉页生命周期,从而正确地初始化控件,使用视图状态数据填充控件属性以及运行所有控件行为逻辑。(控件的生命周期基于页的生命周

ctangqh的专栏 4429

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

aspx页面与codeBehind

Aspx页面与CodeBehind        在深入了解页面的生命周期之前,我们先来探讨一些Aspx与CodeBehind之间的关系。             相信使用过CodeBehind技术的朋友,对ASPX顶部的这句话应该是非常熟悉了,我们来一项一项的分析它:        Page language="c#" 这个就不用多说了吧        Codebehind="WebForm.

1832

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ASP.NET页面生命周期描述

在以前写个一篇关于ASP.NET页面生命周期的草稿,最近又看了看ASP.NET,做个补充,看看页面初始过程到底是怎么样的下面是ASP.NET页面初始的过程:1. Page_Init();2. Load ViewState;3. Load Postback data;4. Page_Load();5. Handle control events;6. Page_PreRender();7. Page

Vigor's Blog 1万+

Asp.net页面生命周期中的十个事件

<br />介  绍<br />Asp.net是微软.Net战略的一个组成部分。它相对以前的Asp有了很大的发展,引入了许多的新机制。本文就Asp.net页面的生命周期向大家做一个初步的介绍,以期能起到指导大家更好、更灵活地操纵Asp.net的作用。<br />当一个获取网页的请求(可能是通过用户提交完成的,也可能是通过超链接完成的)被发送到Web服务器后,这个页面就会接着运行从创建到处理完成的一系列事件。在我们试图建立Asp.net页面的时候,这个执行周期是不必去考虑的,那样只会自讨苦吃。然而,如果被正确

HiNet 3288

Asp.Net页面生命周期

一.什么是Asp.Net页面生命周期 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面,  完全识别 HTTP 页面处理程序类后,ASP.NET 运行时将调用处理程序的 ProcessRequest 方法来处理请求,来创建页面对象。通常情况下,无需更改此方法的实现,因为它是由 Page 类提供的。接下来被创建页

moshengtan的专栏 877

深入研究Asp.net页面的生命周期

深入研究Asp.net页面的生命周期上海 王凯明介绍Asp.net是微软.Net战略的一个组成部分。它相对以前的Asp有了很大的发展,引入了许多的新机制。本文就Asp.net页面的生命周期向大家做一个初步的介绍,以期能起到指导大家更好、更灵活地操纵Asp.net的作用。当一个获取网页的请求(可能是通过用户提交完成的,也可能是通过超链接完成的)被发送到Web服务器后,这个页面就会接着运行从创建到处理

time_is_life的专栏 962

ASPX页面代码笔记

一、ASPX页面代码 1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="QualityException.aspx.cs" Inherits="QualityException_QualityException" %> 解释:Language="C#" --编程语言为C# AutoEventWireup="true...

来日可期的博客 896

ASP.NET框架

<br />一、框架概述<br /> <br />为了服务于一个default.aspx的网页请求,ASP.NET运行库需要获得对Asp.default_aspx类的引用。如果AppDomain当前加载的任何一个程序集中都没有该类,就创建该类。接着,HTTP运行时环境通过接口IHttpHandler调用该类中的ProcessRequest方法。大致包括如下三方面:<br /> <br />1、输入请求的转换<br />每个引用.aspx资源的输入请求都会被映射到Page的派生类。ASP.NET HTTP运行

老程序员 5455

.NET Framework与.NET Framework SDK有什么不同?ASP.NET 页面生命周期?

.NET Framework与.NET Framework SDK有什么不同?很多新手也学了很长时间的.NET,但对于这.NET Framework与.NET Framework SDK到底有什么区别可能还是不太清楚,本人也是借别人的话重新阐述一下,希望可以给新手提供帮助。.NET Framework是微软开发的运行于老版本之上的.NET软件运行平台。只要安装了.NET Framework,则从W

.NET学习 从一点一滴开始 1862

ASP.NET页面上的生命周期与事件顺序

 一、常规页生命周期阶段ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤。这些步骤包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现。了解页生命周期非常重要,因为这样做您就能在生命周期的合适阶段编写代码,以达到预期效果。此外,如果您要开发自定义控件,就必须熟悉页生命周期,以便正确进行控件初始化,使用视图状态数据填充控件属性以及运行任何控件

dodream的专栏 2287

ASP.NET的页面和控件

欢迎来到《ASP.NET网站开发》课程的第一章!在本章中,我们将深入探讨ASP.NET的页面和控件。ASP.NET页面是构建Web应用程序的基本单元,而控件则提供了丰富的功能和交互能力。本节将详细讲解ASP.NET页面的结构、常用的服务器控件以及如何处理控件的事件。本节中,我们深入探讨了ASP.NET的页面和控件,以及它们在Web应用程序中的作用和功能。我们学习了ASP.NET页面的结构,包括@Page指令、HTML元素和代码块。我们还介绍了常用的服务器控件和它们的功能。

听风的声音 1221
上一篇: Asp.Net底层解析(二)——视图状态ViewState与控件状态ControlState详解
下一篇: Asp.Net底层解析(四)——应用程序生命周期与HttpModule
NewClass
博客等级 码龄16年 22粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值