`
wgj830823
  • 浏览: 51225 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Page_Init和Page_Load的区别 (转)

阅读更多

在Init事件里,不处理 ViewState

Page_Init 是初始化页面,Page_Load是读取加载。

首先,我们要弄明白,Page是一个Class,这个明白吧?
然后,Page有两个事件,一个是Load事件,另外一个是Init事件。
然后,在那个构造方法里面,比如一般是Web Form1()
里面调了一个方法InitComponent(),在这个方法里面,为Page类的两个事件定义了两个处理方法,即
this.Load += new System.EventHandler(this.Page_Init);
this.Load += new System.EventHandler(this.Page_Load);

注意,这个Page_Load你可以改用你任何喜欢的名字:)
然后,你就可以在Page_Load里面写任何你喜欢写的代码了。
如果是WinForm的话,那上面的Page应该换为System.Windows .Forms.Form 这个类了。   
   事件的触发次序是page_init在先,page_load在后

他们都是不可或缺的,所以如果你重载这两个方法,不要忘记调用父类的同名方法,不然会出现很大问题。   
    
   在页面的init方法中,会“逐一调用所有子控件”,执行这样四项主要任务:   
   1.    从页面上的ViewState隐藏字段取回上一页面的状态值。   
   2.    取得用户新修改过的值(Post值)。如果发觉修改,还会记录下来准备触发changed事件。   
   3.    取得event事件,例如各个控件的click事件或者用户定义的事件,也是记录下来。   
   4.    调用TrackViewState方法,通知控件此时之后对ViewState的修改都需要输出保存到页面上。   
    
   在页面的load方法中,会“逐一调用所有子控件”的load事件。一般来说用户自定义的对控件属性的修改操作在此时完成。   
    
   但是,如果在page的load方法中动态地向控件的Controls集合添加新的子控件,此时仍然会对被添加的子控件执行上述所有操作。因此如果你创建 一个子控件,然后设置一个viewstate值,然后才把它放入page控件树中,会发现这个viewstate值没有保存住,又被原来的值“回填”回来 了。   
    
   在页面的load方法之后,才会触发各个控件的changed事件,之后是各种click和自定义事件。

控件自己从viewstate字段取回值的时候,是根据clientID作为唯一标识符的。此值是根据上层控件(如果未实现 INamingContainer接口则继续查找上层控件)的clientID加上自己的ID组合而成。   
    
   因此,对于动态增加的控件,如果没有准确地重建ClientID,就不要指望Viewstate中的值正确。同理,那些changed事件、click事 件和其它自定义事件也没办法准确触发。

为什么“一般来说用户自定义的对控件属性的修改操作在此时完成”呢?   
    
   因为只有这个时候各个控件的值才准备好。如果你的界面需要根据客户端录入的值,或者任何当前正确的页面属性值来生成(而不是简单得在一片空白的时候就能生 成),只能在这个时刻之后才恰当。

 

 

 

 

原文地址 <url>http://hi.baidu.com/huaxiaoya369/blog/item/a13c3762b42bff6a0c33fa34.html</url>

分享到:
评论

相关推荐

    关于Asp.net页面Page_Load被执行两次的问题分享

    总结来说,了解和掌握Page_Load被执行两次的问题,以及如何通过设置AutoEventWireup属性和显式处理页面生命周期事件来解决这个问题,对于开发高效且稳定的*** Web应用程序是非常重要的。希望本文能够为遇到类似问题...

    ASP.NET页面生命周期描述

    这个过程与 Page_Init() 的区别在于 Page_Load() 可以通过 Page.IsPostBack 属性来判断当前页面是否是第一次加载或 Postback。我们可以在这个过程中执行不同的代码,例如,对于第一次加载和 Postback 的处理。 ...

    东北石油大学web期末考试知识点整理

    ASP.NET提供了多种事件处理机制,例如Page_Load()、Page_Init()、Button_Click()等。 * Page_Load()事件:在页面加载时被触发,用于完成一些初始化操作。 * Page_Init()事件:在页面初始化时被触发,用于初始化控件...

    asp.net2.0系列教程第4章_第3节

    1. **Page_Init 和 Page_Load 事件**: 在ASP.NET页面生命周期中,Page_Init事件先于Page_Load发生。在Page_Init阶段,所有的控件都已创建,此时可以对控件进行初始化设置,如设置初始属性。而Page_Load事件则发生...

    ASP.net始初化页面Loading控件

    Page_Load事件紧接着Page_Init发生,此时,所有控件的属性都已经设定完毕,页面的数据绑定也已完成。在Page_Load中,你可以根据需要处理用户输入或执行数据查询。这个事件是大多数业务逻辑和数据操作的主要场所。...

    uboott移植实验手册及技术文档

    关,如果没有定义这个宏,系统调用 drivers/nand/nand.c 中的 nand_init();否则调用自己在 本文件中的 nand_init()函数,本例使用后者。fs2410.c代码如下: #if defined(CONFIG_CMD_NAND) typedef enum { NFCE_...

    基于 STM32、FreeRTOS、LVGL 的强大智能手表

    功能强大的智能手表 如果你觉得这个手表的硬件难焊接难复刻,又想进行代码的学习,可以试一下新的STM32F411开发板 为了实现页面切换,可以返回... lv_scr_load_anim(ui_MenuPage,LV_SCR_LOAD_ANIM_MOVE_RIGHT,0,0,tr

    QWebEngineView内嵌本地HTML及数据交互完整代码

    page = CustomPage() main.web_view.setPage(page) main.show() sys.exit(app.exec_()) ``` 在`TInteractObject.py`中,你需要定义一个类,这个类将被JavaScript调用: ```python from PyQt5.QtCore import ...

    qemu(二进制翻译器)源码分析

    在 elf_ops.h 文件中,QEMU 使用了一些 trick 来生成相关的函数,例如 load_elf_32() 和 load_elf_64() 函数。这些函数都是静态的,用于加载不同位数的内核映像。 QEMU 的源码分析为我们提供了一个了解 QEMU 的实现...

    2021-2022计算机二级等级考试试题及答案No.5471.docx

    在加载页面时,首先触发的是内容页的Page_PreInit事件,接着是母版页的Page_Init,然后是内容页的Page_Init,Page_InitComplete,Page_PreLoad,Page_Load,母版页的Page_Load,按钮点击等回发事件,Page_...

    重写Page类案,生成XML文档

    例如,可以在Page类的_Init或_Load事件中添加代码,检查当前用户的登录状态和角色,如果不符合访问条件,则可以重定向到登录页面或其他错误页面。 在描述中提到的“生成XML文档的代码”可能涉及到XML序列化,这是...

    【ASP.NET编程知识】ASP.NET的事件模型(很适合学习的文章).docx

    每个阶段都有其对应的事件,例如 Page_Init 事件、Page_Load 事件等。这些事件可以被程序员重写,以便在不同的阶段执行特定的操作。 在 Default.aspx 页面中,我们可以看到 Page_Load 方法,这个方法是在页面加载时...

    2021-2022计算机二级等级考试试题及答案No.5324.docx

    顺序包括:Page_PreInit、Page_Init(母版页)、Page_Init(内容页)、Page_InitComplete、Page_PreLoad、Page_Load(内容页)、Page_Load(母版页)、按钮点击事件、Page_LoadComplete、Page_PreRender、Page_...

    常用页面置换算法模拟实验.pdf

    int c = (*((struct Page_table*)p)).load_time - (*((struct Page_table*)q)).load_time; if (c &gt; 0) return 1; else return -1; } int cmp1(const void *p, const void *q) { int c = (*((struct Page_...

    Page类应用实例

    这个类包含了处理页面生命周期的方法,如Init、Load、Render等,这些方法在页面从创建到呈现给用户的过程中会被自动调用。通过重写这些方法,开发者可以实现自定义的页面逻辑。 Page类的主要特性包括: 1. 生命...

    2021-2022计算机二级等级考试试题及答案No.12458.docx

    - MasterPage的Page_Init - 内容页的Page_Init - 内容页的Page_InitComplete - 内容页的Page_PreLoad - 内容页的Page_Load - MasterPage的Page_Load - 内容页的Page_LoadComplete - 内容页的Page_PreRender ...

    asp页面加载事件顺序

    3. **加载(Load)**:`Page_Load`事件是最常见的处理用户输入和更新控件状态的地方。所有控件的`Load`事件也会在这个阶段被触发。如果页面进行了回发(即用户与页面交互后再次提交),`Page_Load`将被执行,因此...

    引用asp.net母版页后,母版页和内容页的页面事件执行顺序

    - 母版页的`Page_Load`事件紧接着执行,这是母版页处理业务逻辑和数据绑定的地方。 - 接下来,内容页的`Page_Load`事件被调用,同样用于处理内容页的业务逻辑和数据绑定。在这个阶段,内容页可以访问并操作母版页...

    asp心得体会(心得体会-asp).doc

    在 ASP.NET 中,页面生命周期包括 Page_Init、Page_Load、Page_Render 等过程。在 Page_Init 过程中,通常对组件进行初始化。在 Page_Load 过程中,可以做一些初始化的工作。例如,设置标签控件的文本为“初始”。 ...

Global site tag (gtag.js) - Google Analytics