在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>
分享到:
相关推荐
总结来说,了解和掌握Page_Load被执行两次的问题,以及如何通过设置AutoEventWireup属性和显式处理页面生命周期事件来解决这个问题,对于开发高效且稳定的*** Web应用程序是非常重要的。希望本文能够为遇到类似问题...
这个过程与 Page_Init() 的区别在于 Page_Load() 可以通过 Page.IsPostBack 属性来判断当前页面是否是第一次加载或 Postback。我们可以在这个过程中执行不同的代码,例如,对于第一次加载和 Postback 的处理。 ...
ASP.NET提供了多种事件处理机制,例如Page_Load()、Page_Init()、Button_Click()等。 * Page_Load()事件:在页面加载时被触发,用于完成一些初始化操作。 * Page_Init()事件:在页面初始化时被触发,用于初始化控件...
1. **Page_Init 和 Page_Load 事件**: 在ASP.NET页面生命周期中,Page_Init事件先于Page_Load发生。在Page_Init阶段,所有的控件都已创建,此时可以对控件进行初始化设置,如设置初始属性。而Page_Load事件则发生...
Page_Load事件紧接着Page_Init发生,此时,所有控件的属性都已经设定完毕,页面的数据绑定也已完成。在Page_Load中,你可以根据需要处理用户输入或执行数据查询。这个事件是大多数业务逻辑和数据操作的主要场所。...
关,如果没有定义这个宏,系统调用 drivers/nand/nand.c 中的 nand_init();否则调用自己在 本文件中的 nand_init()函数,本例使用后者。fs2410.c代码如下: #if defined(CONFIG_CMD_NAND) typedef enum { NFCE_...
功能强大的智能手表 如果你觉得这个手表的硬件难焊接难复刻,又想进行代码的学习,可以试一下新的STM32F411开发板 为了实现页面切换,可以返回... lv_scr_load_anim(ui_MenuPage,LV_SCR_LOAD_ANIM_MOVE_RIGHT,0,0,tr
page = CustomPage() main.web_view.setPage(page) main.show() sys.exit(app.exec_()) ``` 在`TInteractObject.py`中,你需要定义一个类,这个类将被JavaScript调用: ```python from PyQt5.QtCore import ...
在 elf_ops.h 文件中,QEMU 使用了一些 trick 来生成相关的函数,例如 load_elf_32() 和 load_elf_64() 函数。这些函数都是静态的,用于加载不同位数的内核映像。 QEMU 的源码分析为我们提供了一个了解 QEMU 的实现...
在加载页面时,首先触发的是内容页的Page_PreInit事件,接着是母版页的Page_Init,然后是内容页的Page_Init,Page_InitComplete,Page_PreLoad,Page_Load,母版页的Page_Load,按钮点击等回发事件,Page_...
例如,可以在Page类的_Init或_Load事件中添加代码,检查当前用户的登录状态和角色,如果不符合访问条件,则可以重定向到登录页面或其他错误页面。 在描述中提到的“生成XML文档的代码”可能涉及到XML序列化,这是...
每个阶段都有其对应的事件,例如 Page_Init 事件、Page_Load 事件等。这些事件可以被程序员重写,以便在不同的阶段执行特定的操作。 在 Default.aspx 页面中,我们可以看到 Page_Load 方法,这个方法是在页面加载时...
顺序包括:Page_PreInit、Page_Init(母版页)、Page_Init(内容页)、Page_InitComplete、Page_PreLoad、Page_Load(内容页)、Page_Load(母版页)、按钮点击事件、Page_LoadComplete、Page_PreRender、Page_...
int c = (*((struct Page_table*)p)).load_time - (*((struct Page_table*)q)).load_time; if (c > 0) return 1; else return -1; } int cmp1(const void *p, const void *q) { int c = (*((struct Page_...
这个类包含了处理页面生命周期的方法,如Init、Load、Render等,这些方法在页面从创建到呈现给用户的过程中会被自动调用。通过重写这些方法,开发者可以实现自定义的页面逻辑。 Page类的主要特性包括: 1. 生命...
- MasterPage的Page_Init - 内容页的Page_Init - 内容页的Page_InitComplete - 内容页的Page_PreLoad - 内容页的Page_Load - MasterPage的Page_Load - 内容页的Page_LoadComplete - 内容页的Page_PreRender ...
3. **加载(Load)**:`Page_Load`事件是最常见的处理用户输入和更新控件状态的地方。所有控件的`Load`事件也会在这个阶段被触发。如果页面进行了回发(即用户与页面交互后再次提交),`Page_Load`将被执行,因此...
- 母版页的`Page_Load`事件紧接着执行,这是母版页处理业务逻辑和数据绑定的地方。 - 接下来,内容页的`Page_Load`事件被调用,同样用于处理内容页的业务逻辑和数据绑定。在这个阶段,内容页可以访问并操作母版页...
在 ASP.NET 中,页面生命周期包括 Page_Init、Page_Load、Page_Render 等过程。在 Page_Init 过程中,通常对组件进行初始化。在 Page_Load 过程中,可以做一些初始化的工作。例如,设置标签控件的文本为“初始”。 ...