asp.net webform事件触发顺序
2014-05-06 16:46
316 查看
了解页的生存周期中的每一个请求是非常重要的,丢值、丢状态的问题都可能是你对页的生存周期了解不够造成的。
当然,如果你要在asp.net保留状态的话,可以用诸如Application,Session,Cache,或者Cookies之类的
注意:asp.net 2.0中的视图状态由两部分组成,控件状态和视图状态。详细了解请参考这篇文章
http://msdn2.microsoft.com/en-us/library/1whwt1k7(VS.80).aspx
除了Init()和Unload()之外的所有事件都是从最外面到最里面被激发的
1. PreInit()
在这个页面级的事件中,所有在设计时创建的控件都将被用默认值做初始化。例如,如果你有一个Text属性值为“Hello”的TextBox控件,则此时这个属性被设置。我们也可以在这里动态的创建控件。
这个事件仅仅发生在页级别的类中,用户控件和母版页没有这个事件
下面的代码示例了如何重写这个方法以增加你的自定义代码
protected override void OnPreInit(EventArgs e)
{
// custom code
base.OnPreInit(e);
}
注意,我们只能在PreInit()事件中动态的设置themes
使用母版页时的特例
我们先要了解一个非常重要的知识点——母版页被处理的过程就相当于内容页中的一个控件。
所以如果一个页有其相关联的母版页的话,那么在PreInit()事件里页中的所有控件都不会被初始化。而只有在Init()事件开始之后,你才能直接访问这些控件。为什么?
这个原因就是内容页中的所有控件都包含在“ContentPlaceholder”里,而“ContentPlaceholder”其实就是母版页的一个子控件。现在母版页被处理的过程就相当于内容页中的一个控件,我们早先提到过,除了Init()和Unload()之外的所有事件都是从最外面到最里面被激发的。虽然页的PreInit()是第一个被触发的事件,但是用户控件和母版页是没有这个事件的,所以在页的Page_PreInit()方法中,母版页和用户控件都不会被初始化,而是在Init()事件之后
接下来让我们来看一下Page_Init()事件之后控件的层次结构profile.yahoo.com/SMV54Y77QHXMLGAJZBFPIPSH24/
2. OnInit()
在这个事件里,我们能读出控件的属性(在设计模式中设置的)。但是我们不能读出用户设置的值,因为得到用户设置的值是在LoadPostData()事件被激发之后。不过在这个事件中我们可以得到POST数据,如下
string selectedValue = Request.Form[controlID].ToString();
3. LoadViewState
这个事件仅仅在回发之后被激发(IsPostBack == true)。在这个事件中runtime从隐藏域中分解出view state并加载到所有启用了view state的控件。
4. LoadPostBackData
这个事件也仅仅是在回发之后被激发。
在这个事件里实现了IPostBackDataHandler接口的控件从HTTP的POST
当然,如果你要在asp.net保留状态的话,可以用诸如Application,Session,Cache,或者Cookies之类的
注意:asp.net 2.0中的视图状态由两部分组成,控件状态和视图状态。详细了解请参考这篇文章
http://msdn2.microsoft.com/en-us/library/1whwt1k7(VS.80).aspx
除了Init()和Unload()之外的所有事件都是从最外面到最里面被激发的
1. PreInit()
在这个页面级的事件中,所有在设计时创建的控件都将被用默认值做初始化。例如,如果你有一个Text属性值为“Hello”的TextBox控件,则此时这个属性被设置。我们也可以在这里动态的创建控件。
这个事件仅仅发生在页级别的类中,用户控件和母版页没有这个事件
下面的代码示例了如何重写这个方法以增加你的自定义代码
protected override void OnPreInit(EventArgs e)
{
// custom code
base.OnPreInit(e);
}
注意,我们只能在PreInit()事件中动态的设置themes
使用母版页时的特例
我们先要了解一个非常重要的知识点——母版页被处理的过程就相当于内容页中的一个控件。
所以如果一个页有其相关联的母版页的话,那么在PreInit()事件里页中的所有控件都不会被初始化。而只有在Init()事件开始之后,你才能直接访问这些控件。为什么?
这个原因就是内容页中的所有控件都包含在“ContentPlaceholder”里,而“ContentPlaceholder”其实就是母版页的一个子控件。现在母版页被处理的过程就相当于内容页中的一个控件,我们早先提到过,除了Init()和Unload()之外的所有事件都是从最外面到最里面被激发的。虽然页的PreInit()是第一个被触发的事件,但是用户控件和母版页是没有这个事件的,所以在页的Page_PreInit()方法中,母版页和用户控件都不会被初始化,而是在Init()事件之后
接下来让我们来看一下Page_Init()事件之后控件的层次结构profile.yahoo.com/SMV54Y77QHXMLGAJZBFPIPSH24/
2. OnInit()
在这个事件里,我们能读出控件的属性(在设计模式中设置的)。但是我们不能读出用户设置的值,因为得到用户设置的值是在LoadPostData()事件被激发之后。不过在这个事件中我们可以得到POST数据,如下
string selectedValue = Request.Form[controlID].ToString();
3. LoadViewState
这个事件仅仅在回发之后被激发(IsPostBack == true)。在这个事件中runtime从隐藏域中分解出view state并加载到所有启用了view state的控件。
4. LoadPostBackData
这个事件也仅仅是在回发之后被激发。
在这个事件里实现了IPostBackDataHandler接口的控件从HTTP的POST
相关文章推荐
- ASP.net 事件触发顺序
- ASP.NET页面生命周期(包含页面的回传和事件触发的执行顺序)
- asp.net 中, command事件 和click事件的触发顺序.
- ASP.NET页面执行顺序(第二个LoadViewState事件可以解释我新浪博客中的“HiddenField隐藏域的值改变时onvaluechanged的事件触发问题”一文的问题)
- ASP.NET 2.0中Page事件的触发顺序
- ASP.NET 2.0 中各事件的触发顺序
- ASP.NET 事件触发顺序
- asp.net里事件的触发顺序
- ASP.NET中HttpApplication中ProcessRequest方法中执行的事件顺序;ASP.NET WebForm和MVC整体请求流程图
- ASP.NET 2.0 中各事件的触发顺序
- 简化: ASP.NET 事件触发顺序
- 引用asp.net母版页后,母版页和内容页的页面事件执行顺序
- ASP.NET 页面事件执行顺序介绍
- ASP.NET页面事件:顺序与回传详解
- Asp.net中服务端控件事件是如何触发的(笔记)
- asp.net页面从初始化到卸载事件顺序<转>
- 如何让DataGrid能够在客户端点击某一行的任意位置,而触发服务端的事件(Asp.net)
- ASP.NET页面事件:顺序与回传详解
- js触发asp.net的Button的Onclick事件
- ASP.NET页面上的生命周期与事件顺序