从网页抓取数据(想了解页面生命周期详解的相关知识和一些实例欢迎阅读)

优采云 发布时间: 2022-01-12 20:08

  从网页抓取数据(想了解页面生命周期详解的相关知识和一些实例欢迎阅读)

  想了解页面生命周期详解吗?在本文中,我将讲解页面生命周期的相关知识和一些代码示例。欢迎阅读和指正。我们先把重点放在:生命周期下面一起学习。

  是 Microsoft .Net 战略的一个组成部分。与之前的Asp相比,有了很大的发展,引入了很多新的机制。本文将对页面的生命周期进行初步介绍,以指导您更好更灵活的操作。当获取网页的请求(由用户提交或通过超链接提交)被发送到 Web 服务器时,该页面会运行从创建到完成的一系列事件。当我们尝试构建页面时,这个执行周期是没有必要考虑的,只会自找麻烦。但是,如果操作得当,页面的执行周期可以成为一种有效且强大的工具。许多编写页面和用户控件的开发人员发现了解正在发生的事情和时间很有帮助。下面我给大家介绍一下从页面创建到处理完成的十个事件。它还向您展示了如何将自己的代码添加到这些事件中以达到预期的效果。

  一。初始化对象

  页面的控件(以及页面本身)最初应该被正确初始化。通过在 C# 文件的构造函数中声明所有对象(如 1) 页面所示),了解要创建的对象数量及其类型。一旦你在构造函数中声明了所有对象,你就可以通过继承类、方法、事件或属性来传递访问它们。但是,如果您的某些对象是在 Aspx 文件中指定的某些控件,则这些控件根本没有属性。同时通过代码访问它们会产生一些意想不到的错误,因为这些 Control 实例不是按一定的顺序创建的(如果它们是一起创建的)。您也可以通过 OnInit 覆盖初始化事件。

  二。导入 Viewstate 数据

  在初始化事件之后,所有控件只能通过它们的 ID 引用来访问(因为还没有相应的 DOM 可以使用)。在 LoadViewState 事件中,所有控件都将获得它们的第一个属性:Viewstate 属性。这个属性最终会返回给服务器来判断页面是已经被用户访问过还是正在被用户访问。Viewstate 属性存储为名称/值对字符串,并收录控件的文本和值等信息。此属性存储在请求页面时传递的隐藏控件的 value 属性中。与Asp3.0 的维护和判断页面状态的方式相比,这种方法有了很大的进步。也可以重载LoadViewState事件函数来设置相应控件的值。

  三。使用 LoadPostData 处理回发数据

  在页面创建的这个阶段,服务器处理页面上的控件提交的表单数据(称为回发数据)。当页面提交表单时,框架会对每个提交数据的控件执行一个 IPostBackDataHandler 接口操作。页面然后执行 LoadPostData 事件来解析页面以找到每个已执行 IpostBackDataHandler 接口操作的控件,并使用适当的回发数据更新这些控件的状态。它通过将 NameValue 集中的“名称/值”对与每个控件的唯一 ID 匹配来实现这一点。因此,每个控件在页面上必须具有唯一的 ID。不可能有多个控件共享一个 ID。甚至一些用户定义的控制框架也会给他们自己的唯一ID。

  四。导入对象

  对象在 Load 事件中实例化。首次将所有对象布局在 DOM 页面中(中文称为控制树),可以通过代码或相对位置进行引用。这样,对象就可以很方便的从客户端获取Html中的宽度、高度、值、可见性等属性。当然,设置控件属性等操作发生在Load事件中。这个过程是整个生命周期中最重要的,也是最重要的。您可以通过调用 OnLoad 来重载 Load 事件

  五。引发PostBackChanged 事件

  如上所述,此事件发生在所有控件都执行了 IPostBackDataHandler 接口操作并使用正确的回发数据更新之后。在这个过程中,每个控件都被分配一个布尔值来标记该控件是否已经被更新。然后只需在整个页面上查找任何已更新的控件并执行 RaisePostDataChanged 事件操作。但是这个事件只有在所有控件都被更新并且Load事件完成之后才会发生。这可确保在回发数据更新另一个控件之前,不会在 RaisePostDataChanged 事件中手动更改一个控件。

  六。处理客户端 PostBack 事件

  当服务器端回发数据引发的事件完成后,产生回发数据的对象执行RaisePostBackEvent事件操作。但是,在某些情况下,控件状态的更改会导致其将表单返回到服务器,或者用户单击提交按钮会导致表单返回到服务器。在这种情况下,应该有相应的处理代码来体现面向对象(OOP)编程的事件驱动原则。由于呈现给浏览器的数据的准确性要求,RaisePostBackEvent 事件在一系列回发事件中最后发生。

  在调用执行函数后不应更新回发期间更改的控件。也就是说,由于预期事件而更改的任何数据都应反映在最终页面上。您可以修改 RaisePostBackEvent 函数以满足您的要求

  七。预渲染对象

  可以更改对象并保存更改的最后时刻是此步骤 - 预渲染对象。这允许您在此步骤中对控件的属性、控件树结构等进行最终更改。甚至不要考虑对其进行任何更改,因为它不影响数据库调用和视图状态更新。在这一步之后对对象的所有修改最终都会被确定为不保存到页面的视图状态中。您可以使用 OnPreRender 覆盖此步骤。

  八。保存视图状态

  在对页面控件进行所有修改后保存视图状态。对象的状态数据仍然保存在隐藏控件中,呈现给Html的对象状态数据也是从这里获取的。在 SaveViewState 事件中,它的值可以保存到 viewstate 对象中,但是此时不能修改页面上的控件。您可以使用 SaveViewState 覆盖此步骤

  九。渲染为 Html

  Render 事件在使用 HTML 创建输出到浏览器的页面时发生。在 Render 事件期间,页面调用其中的对象以将它们呈现为 Html。然后,用户的浏览器可以以 Html 的形式访问该页面。当Render事件重载时,开发者可以编写自定义的Html代码,使原来生成的Html失效,按照新的Html组织页面。Render 方法将 HtmlTextWriter 对象作为参数,并使用它在浏览器上将 Html 显示为网页。此时仍然可以进行一些修改,但它们只是客户端的一些更改。您可以覆盖 Render 事件

  十。销毁对象

  渲染到 Html 完成后,应销毁所有对象。在 Dispose 事件中,您应该销毁创建页面时创建的所有对象。此时所有处理都已完成,因此销毁任何剩余的对象都不会产生错误,包括页面对象。您可以覆盖 Dispose 事件

  全文摘要

  这些是页面生命周期中的十个事件。每次我们请求一个页面时,我们都会经历相同的过程:从初始化对象到销毁对象。通过了解页面内部的运行机制,相信大家在编写和调试代码的时候会更加自如。

  相关文章

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线