#net深入体验与实战精要--ASP.NET开发大杂烩_第1页
#net深入体验与实战精要--ASP.NET开发大杂烩_第2页
#net深入体验与实战精要--ASP.NET开发大杂烩_第3页
#net深入体验与实战精要--ASP.NET开发大杂烩_第4页
#net深入体验与实战精要--ASP.NET开发大杂烩_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、正巧今天遇到一个获取动态生成table中的一个动态生成的TextBox的值的时候总是findcontrol不到。后来经过我们的徐总,瞬间解决,但是我觉得对于一个页面的声明周期,我了解的还是很少,今天希望能通过这篇文章,再次了解一遍。3.1页面生命周期3.1.1独立页面生命周期事件顺序 public partial class _Default : System.Web.UI.Page protected void Page_PreInit(object sender, EventArgs e) Response.Write(Page_PreInit); protected void Page_

2、Init(object sender, EventArgs e) Response.Write(Page_Init); protected void Page_InitComplete(object sender, EventArgs e) Response.Write(Page_InitComplete); protected void Page_PreLoad(object sender, EventArgs e) Response.Write(Page_PreLoad); protected void Page_Load(object sender, EventArgs e) Respo

3、nse.Write(Page_Load); protected void Page_LoadComplete(object sender, EventArgs e) Response.Write(Page_LoadComplete); protected void Page_PreRender(object sender, EventArgs e) Response.Write(Page_PreRender); protected void Page_PreRenderComplete(object sender, EventArgs e) Response.Write(Page_PreRen

4、derComplete); protected void Page_SaveStateComplete(object sender, EventArgs e) Response.Write(Page_SaveStateComplete); protected void Page_Unload(object sender, EventArgs e) /Response.Write(Page_Unload); int i = 0; i+;/这行代码是用来设置断点的,这里不能用Response.Write protected void Button1_Cli

5、ck(object sender, EventArgs e) Response.Write(Button事件触发!); 输出结果:Page_PreInitPage_InitPage_InitCompletePage_PreLoadPage_LoadPage_LoadCompletePage_PreRenderPage_PreRenderCompletePage_SaveStateComplete这就是独立页面的执行顺序,但我点击Button按钮的时候页面会进行Postback并重新加载页面,这个过程事件顺序:Page_PreInitPage_InitPage_InitCompletePage_

6、PreLoadPage_LoadButton事件触发!Page_LoadCompletePage_PreRenderPage_PreRenderCompletePage_SaveStateComplete 这部分虽然很简单,但是在我们获取页面控件或者相关值的时候,常常找不到控件,很大一部分原因是因为没有了解页面的生命周期事件顺序3.1.2具有Master页的声明周期事件顺序当页面有Master页的时候,将上面代码分别复制到Site.Matster和ContentPage.aspx,再次执行ContentPage.aspx会看到如下结果:Page_PreIn

7、itMasterPage_InitPage_InitPage_InitCompletePage_PreLoadPage_LoadMasterPage_LoadPage_LoadCompletePage_PreRenderMasterPage_PreRenderPage_PreRenderCompletePage_SaveStateComplete当点击按钮的时候Page_PreInitMasterPage_InitPage_InitPage_InitCompletePage_PreLoadPage_LoadMasterPage_LoadButton事件触发!Page_LoadCompleteP

8、age_PreRenderMasterPage_PreRenderPage_PreRenderCompletePage_SaveStateComplete3.1.3APS.NET声明周期详解网页事件典型的使用方式PreInitPreInit事件是网页生命周期中非常早起的一个事件,在PreInit事件触发之后,就会加载用户设置信息与网页主题。我们通常使用PreInit事件来执行下列处理:l 检查IsPostBack属性,来确认网页是否为第一次被处理。l 创建或重新创建动态控件。l 动态设置一个母版页。l 动态设置Theme属性。l 读取或设置用户设置文件属性值。Init在所有的控件都已经被初始化

9、,而且所有的面板设置都已经应用之后,就会触发Init事件。可以使用此事件来读取或初始化控件属性。InitComplete此事件由Page对象触发。当网页初始化完成之后,就会触发此事件。PreLoad如果希望在Load事件触发之前,针对您的网页或控件执行一些处理,就可以使用此事件。在Page触发此事件之后,它会加载它本身与所有控件的视图状态,然后处理Request实例的回发数据。LoadPage会调用Page上的Load事件处理例程,然后按照顺序为每一个子控件执行相同的操作,直到网页与所有控件被加载为止。我们通常会使用Load事件来设置控件的属性并创建数据库连接。控件事件我们通常使用控件的各个事

10、件来完成各项互动操作。LoadComplete在网页上的所有其他控件都已经被加载之后,要执行的处理就可以通过此事件来完成。PreRender在控件已经被加载但是还没有解释之前,就会触发此事件。在此事件之前会执行下列操作:l Page对象会调用网页与每一个控件的EnsureChildControls方法。l DataSourceID属性被设置的数据绑定控件会调用其DataBind方法。网页上的每一个控件都会触发PreRender事件,您可以利用它对网页或其控件的内容做最后的更改。SavaStateComplete在已经为网页和网页上的所有控件保存了视图状态与控制状态信息后,就会触发此事件。此时对

11、网页与控件所作的任何更改都会被忽略。如果您的操作是要在视图状态被保存之后才执行,则非常适合使用SaveStateComplete事件,但是请不要对控件进行任何更改。RenderRender不是一个事件,而是一个方法。在此阶段,Page对象会调用每一个控件的Render方法。所有的ASP.NET服务器控件都拥有一个Render方法,它会输出要传送给浏览器的控件标记。当我们创建一个自定义控件时,通常会重写Render方法来输出控件的标记。然而,如果您的自定义控件仅仅是标准的ASP.NET服务器控件,而没有任何的自定义标记,则不需要重写Render方法。Unload每一个控件的Unload事件被触发

12、之后,才会触发网页的Unload事件。对于控件而言,我们会使用此事件为特定的控件进行最后的清理工作,比方说,关闭某控件所使用的数据库连接。对于网页本身而言,同样会使用此事件来进行最后的清理工作,比方说,关闭已打开的文件与数据库连接、完成记录写入操作等。3.2页面状态管理3.2.1 Cookie1.创建HttpCookie cookie=new HttpCookie(user);cookie.Value=sunhan/赋值只能通过字符串cookiesex=男; /多个cookie赋值,或者:cookie.Values.Add(age,20);cookie.Expires=DateTime.Now

13、.AddHours(1);/控制有效期,从当前时间之后的一个小时/将Cookie添加到内部的Cookie集合。Cookie集合中所有Cookie均通过Http输出流在setCookie头中发送到客户端Response.AppendCookie(cookie);/Reponse.Cookie.Add(cookie);2.读取HttpCookie cookie=Request.Cookiesuser;if(null=cookie) Response.Write(木有)else Response.Write(cookie的全部值是:+cookie.Value+); Response.Write(se

14、x值是:+cookiesex+); Response.Write(age值是:+cookie.Valuesage+);删除Cookiecookie.Expires=DateTime.Now.AddHours(-1);跨域读取Cookie3.2.2 HtmlInputHidden隐藏域要使用隐藏域,就必须使用Http-Post方法提交互联网网页,尽管其名字是隐藏域,但他的值并不是隐藏的,我们可以通过查看源代码进行查看。3.2.3 ViewState例如:protected void Page_Load(object sender,EventArgs e) if (ViewStatearrList

15、!=null) PageArrayList=(ArrayList)ViewStatearrList;/从viewstate中获取数据 else PageArrayList=CreateArray(); this.GridView1.DataSoure=arrayList; this.GridView.DataBind();保存:protected void Page_PreRender(object sender, EventArgs e ) /可以在页面呈现之前保存或更改ViewState数据 ViewState.Add(arrList,PageArrayList);注意点: 与隐藏域不同的

16、是,在使用查看源代码功能是,ViewState属性的值是不可见,他被压缩和加密的。 ViewState存在客户端,减轻服务器段压力 ViewState智能保存可序列化的对象 ViewState不适宜存储大量信息,会加重服务器解析负担 ViewState安全性低。 可以关闭ViewState:EnableViewState=false.提高性能。 3.2.4Request3.2.5 Aplication对象如果没有使用程序强制释放,则Application对象存在于整个引用程序的生命周期内Application对象本质上就是一个Hash表,按键值存放了对象,由于对象时全局并且存在在服务器上,而且

17、存在多线程同事访问,Application里面存在应该是访问较多,就该较少并且是全局,至少大部分功能会使用的数据,如计数器,或者数据库连接串等。3.2.6 Session对象1.Web.Config文件中的Session配置必备属性: mode 设置将Session信息存储到哪里 Off 设置为不使用Session功能 InProc 设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值。 StateServer 设置为将Session存储在独立的状态服务中。 SQLServer 设置将Session存储在SQL Server中。 可选的属性是: cookieless 设置客户

18、端的Session信息存储到哪里 ture 使用Cookieless模式 false 使用Cookie模式,这是默认值。 timeout 设置经过多少分钟后服务器自动放弃Session信息。默认为20分钟 stateConnectionString 设置将Session信息存储在状态服务中时使用的服务器名称和端口号 2.Session具体操作/存储Sessionmyname=Mike;/获取信息myname=Sessionmyname;Session.Clear();/从session状态集合中移除所有键和值Session.Abandon();/取消当前session回话3.Session超时

19、和莫名丢失处理原因: 改动global.asax、Web.config、bin目录里的东西,导致Web Application重启。 有些杀毒软件会扫描你的WebConfig。 服务器内存不足 程序内部让session丢失代码 程序有框架页面和跨域情况 解决方法: 修改Web.config中timeout的时效事件 建议让网上使用独立的引用程序池 ISS设置Session超时事件。网站属性-主目录-配置-应用程序池-响应 在应用程序池上打开网站对应的应用程序池将web数量改为1,重启iss 在如页面里嵌入一个iframe,设置宽度和高度为0,在里面加载页面的里面加入就是定时请求。 4.Sess

20、ion变量和Cookie区别存储位置不同,保存时间也不同3.3服务器和客户端数据交互3.3.1页面数据绑定全攻略1.在页面显示CS后台代码的字符串变量、 姓名: 性别: 年龄: a href=/test.aspx进入public partial class WebForm1 : System.Web.UI.Page public string name = ltp; public string sex = man; public string old = 25; public string url = ConfigurationSettings.AppSettingsUrl; protecte

21、d void Page_Load(object sender, EventArgs e) /Page.DataBind(); /千万不能忘! 只有DataBind()后才有效 如果Page.DataBing()被注销掉,则年龄不会显示。两者区别:专门用于数据绑定。2.动态绑定服务器空间属性值public partial class WebForm2 : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) Page.DataBind(); 图1 图2 图3 asp:Image ID=Image1 runa

22、t=server ImageUrl= 我本想把Page.DataBind()注销掉的。但是后来想到前台有3.绑定HashTable到DataList ENGLISH 中文 protected void Page_Load(object sender, EventArgs e) if (!IsPostBack) Hashtable list = new Hashtable(); list.Add(ltp, 李天平); list.Add(zs, 张三); list.Add(ls, 李四); this.DataList1.DataSource = list; this.DataList1.DataB

23、ind(); 4.页面绑定使用服务器方法 后台有这个方法。5.将DataView绑定到DataList,并调用服务器方法。6.使用DataBinder类进行绑定7.绑定格式化输出8.直接绑定执行javascript方法 function DeleteForum(id) if (confirm(你确认要删除这个论坛及它下面所有的主题吗?) document.formsForums.elementsparamID.value = id; _doPostBack(DeleteForum, ); function DeleteCategory(id) if (confirm(你确认要删除这个类别和它的

24、子论坛吗?) document.formsForums.elementsparamID.value = id; _doPostBack(DeleteCategory, ); a href=删除 asp:HyperLink ID=HyperLink1 runat=server NavigateUrl= Visible= Text=删除 / 3.4 ASP.NET编程中的技巧3.4.1页面之间传值的7种方法。1.get方法-也就是Request;2.使用内存变量Session和Application注:Application实质上市整个虚拟目录中所有文件的集合,如果想在整个应用范围内使用某个变量值

25、,则Application对象时最佳选择。3.Post方法没有runat=server if (Request.Formtxtname != null) TextBox1.Text = Request.Formtxtname; /TextBox1.Text = Request.FormSourceData; 这是有runat=server function post() forPost.action = WebFormC2.aspx; forPost.submit(); 4.静态变量/fasong/定义一个公共变量 public static string str = ; protected void Page_Load(object sender, EventArgs e) protected void Button1_Click(object sender, EventArgs e) str = this.TextBox1.Text; Server.Transfer(WebFormD2.aspx); /jieshouprotected void Page_Load(object sender, EventArgs e) this.TextBo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论