快速业务通道

Asp.net ViewState—又见ViewState

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19
Text   {     get     {       returnViewState["Text"]==null?string.Empty:ViewState["Text"].ToString();     }     set     {       ViewState["Text"]=value;     }   }   protectedvoidPage_Load(objectsender,EventArgse)   {     if(!IsPostBack)     {       Text="test";     }     Controls.Add(ParseControl("Page_Load<br/>"));   }   protectedvoidPage_PreInit(objectsender,EventArgse)   {     Controls.Add(ParseControl("Page_PreInit<br/>"));   }   protectedvoidPage_Init(objectsender,EventArgse)   {     Controls.Add(ParseControl("Page_Init<br/>"));   }   protectedvoidPage_InitComplete(objectsender,EventArgse)   {     Controls.Add(ParseControl("Page_InitCompleted<br/>"));   }   protectedvoidPage_PreLoad(objectsender,EventArgse)   {     Controls.Add(ParseControl("Page_PreLoad<br/>"));   }   protectedvoidPage_LoadComplete(objectsender,EventArgse)   {     Controls.Add(ParseControl("Page_LoadCompleted<br/>"));   }   protectedvoidPage_PreRender(objectsender,EventArgse)   {     Controls.Add(ParseControl("Page_PreRender<br/>"));   }   protectedvoidPage_PreRenderComplete(objectsender,EventArgse)   {     Controls.Add(ParseControl("Page_PreRenderComplete<br/>"));   }   protectedoverridevoidRender(HtmlTextWriterwriter)   {     Controls.Add(ParseControl("Render<br/>"));     base.Render(writer);   }   protectedvoidPage_Unload(objectsender,EventArgse)   {     Controls.Add(ParseControl("Page_Unload<br/>"));   }   protectedoverridevoidLoadViewState(objectsavedState)   {     Controls.Add(ParseControl("LoadViewState<br/>"));     base.LoadViewState(savedState);   }   protectedoverridevoidTrackViewState()   {     Controls.Add(ParseControl("TrackViewState<br/>"));     base.TrackViewState();   }   protectedoverrideobjectSaveViewState()   {     Controls.Add(ParseControl("SaveViewState<br/>"));     returnbase.SaveViewState();   } }

结果如下:

1.在页面第一次加载时:

Asp.net ViewState—又见ViewState

2.点击按钮产生回发时:

Asp.net ViewState—又见ViewState

可以发现在回发时多了一个LoadViewState,它做了什么事情呢?它的工作就是从页面的_ViewState隐藏域中恢复视图状态。那在这个阶段之前对视图状态的更改呢?结果是将会被覆盖掉。于是对应于我们的DropDownList的例子,当第一次执行时为其动态添加的两个item都将被放到视图状态中(通过SaveViewState),而在产生回发时,尽管在执行到Init时又添加了Item,到了LoadViewState的时候,DropDownList的Items又会恢复成上一次保存到视图状态时的情形(同时接下来在调用SaveViewState方法时,又会将当前的Items放到视图状态中去)。如此反复,也就难怪只能看见一直增加Load这样的Item了。

三、为ViewState正名

郑重声明,ViewState是个好人。

最后啰嗦一句,上面‘回’的意思是‘一次’的意思,莫误解了.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号