ASP.NET网页生命周期和执行方法介绍
上面列出的一些阶段在页面级别是不可见的,并且仅对服务器控件的作者和希望创建从页面导出的类的开发人员有意义。Init、Load、PreRender和Unload,以及由嵌入式控件定义的所有回发事件,构成了发送页面的每个阶段标记。页面生命周期的第一个阶段是初始化。这个阶段的标志是Init事件。成功创建页面的控件树后,将为应用程序触发此事件。换句话说,当Init事件发生时,中所有静态声明的控件。aspx源文件已经被实例化并采用了它们自己默认值。控件可以截取Init事件来初始化传入的Web请求的生命周期中所需的所有设置。例如,控件可以加载外部模板文件或设置事件的处理程序。请注意,视图状态信息此时不可用。初始化后,页面框架将加载页面的视图状态。视图是名称/值对的集合,其中控件和页面本身存储所有必须对所有Web请求始终有效的信息。视图状态表示页面的调用上下文。通常,它包含上次在服务器上处理页面时控件的状态。当会话中第一次请求页面时,视图状态为空。默认情况下,视图状态存储在一个隐藏字段中,该字段以静默方式添加到页面中。该字段的名称是__VIEWSTATE。通过重写LoadViewState方法(控件类的受保护且可重写的方法),组件开发人员可以控制视图状态的存储方式以及视图状态的内容如何映射到内部状态。一些方法(如loadpagestatefromfersistencimediam及其对应的savepagestatetopersistencimediam)可用于加载视图状态并将其保存到其他存储介质(如会话、数据库或服务器端文件)。与LoadViewState不同,上述方法只能在从Page导出的类中使用。保存视图状态后,页面树中控件的状态与上次在浏览器中显示页面时的状态相同。下一步是更新它们的状态以包含客户端更改。处理回发数据的阶段使控件有机会更新其状态,从而准确反映客户端上相应HTML元素的状态。例如,服务器的TextBox控件对应的HTML元素为input type=text。在数据回发阶段,文本框控件将检索输入标记的当前值,并使用它来刷新其内部状态。每个控件都应该从发布的数据中提取值,并更新自己的一些属性。文本框控件将更新其文本属性,而复选框控件将刷新其选中属性。服务器和HTML元素之间的对应关系可以通过它们的标识找到。在回发数据处理阶段结束时,页面中所有控件的状态将使用客户端输入的更改更新以前的状态。此时,将为页面触发加载事件。页面中可能有一些控件,当敏感属性在两个不同的请求中被修改时,它需要完成特定的任务。例如,如果在客户端修改了文本框控件的文本,该控件将触发一个TextChanged事件。当一个或多个属性被修改为客户端输入的值时,每个控件都可以决定触发相应的事件。对于这些更改至关重要的控件,该控件实现IPostBackDataHandler接口,并且在Load事件之后立即调用该接口的LoadPostData方法。通过对LoadPostData方法进行编码,控件将验证自上次请求以来是否发生了密钥更改,并触发其自己的更改事件。页面生命周期中的关键事件是被调用来执行服务器端代码的事件,它与客户端触发的事件相关联。当用户点击按钮时,页面将被回发。回发值集包括启动整个操作的按钮的标识。如果控件实现了IPostBackEventHandler接口(如按钮和链接按钮),页面框架将调用RaisePostBackEvent方法。此方法的行为取决于控件的类型。就按钮和链接按钮而言,该方法将找到Click事件处理程序并运行相关的委托。
处理回发事件后,可以显示页面。这一阶段的标志是PreRender事件。控件可以利用这段时间来执行那些需要在保存视图状态和显示输出之前执行的更新操作。下一个状态是保存视图状态,其中所有控件和页面本身都将更新自己的视图状态集合的内容。然后,获得序列化的、散列的、Base64编码的视图状态,并且该视图状态与隐藏字段__VIEWSTATE相关联。您可以通过重写Render方法来更改每个控件的显示机制。此方法接受一个HTML编写器对象,并使用它来累积要为控件生成的所有HTML文本。Page类的Render方法的默认实现包括对所有成员控件的递归调用。对于每个控件,页面将调用Render方法并缓存HTML输出。页面生命周期中的最后一个符号是Unload事件,它发生在页面对象被消除之前。在这种情况下,您应该释放所有可能的关键资源(如文件、图形对象、数据库连接等)。).在这个事件之后,也就是最后,浏览器接收到HTTP响应包并显示页面。与以前的asp相比,asp.net的web生命周期的Asp.net有了很大的进步。许多新的机制被引用。本文是关于ASP.NET网站生命周期的初步介绍。当获取网页的请求(可能由用户提交,或者由用户点击链接)被提交到服务器时。然后网页开始运行从创建到处理的一系列事件。当我们设置ASP.NET页面时,我们不必考虑这个过程。但是,如果操作得当,页面的执行周期将是一个有效而强大的工具。当许多开发人员编写Asp.net页面和用户控件时,他们发现了解整个过程中发生了什么以及何时发生将在帮助完成整个任务中发挥重要作用。我将介绍创建Asp.net页面并完成其处理过程中的十个事件。同时,我还向您展示了如何将自己的代码添加到这些事件中,以达到预期的效果。1.初始化对象首先应该正确初始化页面的控件(以及页面本身)。通过命名C#文件的构造函数中的所有对象,页面知道要创建多少对象及其类型。一旦命名了构造函数中的所有对象,就可以通过继承类、方法、事件或属性来访问它们。但是,如果您的一些对象是Aspx文件中指定的一些控件,那么这些控件根本没有属性。同时,通过代码访问它们会产生一些意外的错误,因为这些控件实例没有明确的创建顺序(如果它们是一起创建的)。此外,您可以通过OnInit重新加载初始化事件。2.导入视图状态数据。在初始化事件之后,所有控件只能被它们的id引用和访问(因为还没有相应的DOM可用)。在LoadViewState事件中,所有控件都将获得它们的第一个属性:ViewState属性。该属性最终将返回到服务器,以确定该页面是已被用户访问还是仍在被用户访问。Viewstate属性保存为一串“名称/值”对,其中包含控件的文本和值等信息。该属性存储在隐藏输入类型=' hidden '/控件的value属性中,并在请求页面时传递。您还可以重载LoadViewState事件函数来设置相应控件的值,如图所示:9501.163.com。
3.用LoadPostData处理回发数据在页面创建的这个阶段,服务器处理由页面上的控件提交的表单数据(在Asp.net称为回发数据)。当页面提交表单时,框架会对提交数据的每个控件执行IPostBackDataHandler接口操作。然后,该页执行LoadPostData事件,解析该页,找到执行了IpostBackDataHandler接口操作的每个控件,并用适当的回发数据更新这些控件的状态。Asp.net通过将名称值集中的“名称/值”对与每个控件的唯一标识进行匹配来实现这一点。因此,每个控件在Asp.net页面上必须有一个唯一的标识,不允许多个控件共享一个标识。即使对于一些用户定义的控件,框架也会给它们自己唯一的ID。在RaisePostDataChanged事件之后,将执行以下RaisePostDataChanged事件。四.导入对象在加载事件中,对象都被实例化了。第一次,所有的对象都排列在DOM页面(在Asp.net称为控制树)中,并且可以被代码或相关位置引用。这样,对象可以很容易地从客户端获得Html中的属性值,如宽度、高度、值和可见性。当然,在Load事件中,还有设置控件属性等操作。这个过程是整个生命周期中最重要的。您可以通过调用OnLoad来重新加载加载事件。图片:
动词(verb的缩写)如上所述,该事件发生在所有控件都执行了IPostBackDataHandler接口操作并被正确的回发数据更新之后。在此过程中,每个控件都被分配一个布尔值,以指示该控件是否已更新。然后,Asp.net在整个页面中搜索任何已更新的控件,并执行RaisePostDataChanged事件操作。但是,在所有控件都已更新并且加载事件完成之前,此事件不会发生。这确保了在通过回发数据更新控件之前,不会在RaisePostDataChanged事件中手动更改其他控件。不及物动词处理客户端回发事件当服务器上回发数据引起的事件完成后,生成回发数据的对象将执行RaisePostBackEvent事件操作。但是,在某些情况下,控件可能会因其状态发生变化而将表单返回到服务器,或者用户单击“提交”按钮将表单返回到服务器。在这种情况下,应该有相应的处理代码来体现事件驱动的OOP编程原理。为了满足呈现给浏览器的数据的准确性要求,RaisePostBackEvent事件是一系列回发事件中的最后一个事件。回发期间更改的控件不应在调用执行函数后更新。也就是说,由于预期事件而改变的任何数据都应该反映在最终页面上。您可以修改RaisePostBackEvent函数来满足您的需求。七.预渲染对象可以更改对象并保存更改。最后一个时刻是这个步骤——预先渲染对象。通过这种方式,您可以在这一步对控件的属性和控件树结构进行最终修改。同时,我们不需要考虑Asp.net所做的任何更改,因为此时,我们已经脱离了数据库调用,视图状态已经更新。完成此步骤后,对对象的所有修改都将完成,并且不能保存在页面的视图状态中。您可以通过OnPreRender覆盖此步骤。八、保存视图状态对页面控件的所有修改完成后,视图状态将被保存。图像的状态数据仍然保存在hidden input type=' hidden '/控件中,呈现给Html的对象状态数据也是从这里获取的。在SaveViewState事件中,它的值可以保存到ViewState对象中,但此时无法修改页面上的控件。可以用SaveViewState重载这个步骤,如图: 所示。
9.当页面呈现为Html并由HTML创建以供浏览器输出时,会发生Render事件。在Render事件期间,页面调用其中的对象以将它们呈现为Html。然后,用户的浏览器可以以Html的形式访问该页面。当Render事件重载时,开发人员可以编写自定义的Html代码,使原始的Html无效,并根据新的Html组织页面。Render方法将HtmlTextWriter对象作为参数,并使用它在浏览器中将Html显示为网页。此时,您仍然可以进行一些修改操作,但它们只是客户端的一些更改。您可以重载Render事件,如图:所示。
10.销毁的对象提交到Html后,所有对象都应该销毁。在Dispose事件中,您应该销毁创建此页面时创建的所有对象。此时,所有处理都已完成,因此销毁任何剩余对象都不会导致错误,包括页面对象。您可以重载Dispose事件。以上的全文总结是Asp.net页面生命周期中的十大事件。每次我们请求Asp.net页面时,我们都会经历相同的过程:从初始化对象到销毁它们。通过了解Asp.net佩奇的内部运作机制。
版权声明:ASP.NET网页生命周期和执行方法介绍是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。