返回首页

简介
在这篇文章中,我想分享一些关于ViewState的概念。状态维护
网页是无状态的,因为HTTP协议是无状态的协议。默认情况下,国家不能保持不同的客户端请求,由应用服务器之间。但有些技术是提供保持状态。我们有三个不同类型的国家:页级用户级别应用水平
ViewState是用来维持页面级别状态。其余的两个是这篇文章的。
在ASP.NET,Control.ViewState物业已经给每个控制之间往返服务器的请求保留其值。ViewState是如何工作的
如果启用的ViewState属性是一个Web表单,那么我们可以看到,右击鼠标并选择"查​​看源代码在浏览器窗口中的HTML代码段。它会是这样的:LT输入类型="hiddenquot;名称= quot; __VIEWSTATEquot;   ; 值="DDDF22DDFD3453333D2DDDFDFD332133 =="/ GT;
一个隐藏的控件添加到每一页和所有控件的数据存储和发送到客户浏览器。当重载页面,两种方法的ViewState被称为:LoadViewState()和SaveViewState(),和数据将被加载到相应的控制。我们可以存储在ViewState?
,我们可以使用ViewState存储任何类型的对象,如果该对象是可序列化的,或者是有TypeConverter的。序列化是将对象的数据转换成一个基于流的输出,并使用该输出的过程中,我们可以构造相同的对象??在这里,我们必须知道此序列中起着其作用在ViewState。早,我们看到控件的数据存储到一个隐藏字段,在此之前的价值或数据被序列化。用户定义的数据类型
用户可以定义自己的数据类型。类和结构的定义属于用户定义的数据类型。如果我们要发挥与用户定义的数据类型和ViewState的,那么我们真的需要集中定义。
试试下面的代码在C#NET Web应用程序:使用系统;使用System.Collections;使用System.ComponentModel;使用System.Data这;使用System.Drawing;使用的System.Web;使用System.Web.SessionState;使用System.Web.UI程序;使用System.Web.UI.WebControls程序;使用System.Web.UI.HtmlControls;命名空间在CodeProject{ 公共类WebForm1的:的System.Web.UI.Page { 60; 私人无效的Page_Load(对象发件人,发送System.EventArgs) { UserClass UC =新UserClass(); this.ViewState ["; Keyquot"] =加州大学; & #160; 回复于("视图状态是workng .. quot;); & #160; } #region Web窗体设计器生成的代码 覆盖保护无效的OnInit(EventArgs的发送)  0; { / / / / CODEGEN:该调用是ASP.NET Web窗体设计器所必需的。 / / ();  60; base.OnInit(E); } 私人无效的Ini​​tializeComponent() {  0; this.Load =新System.EventHandler(this.Page_Load); } #endregion } 公共类UserClass { &# 160; 公共UserClass() { _number = 1; _name ="cp.comquot;;   ; } 私人诠释_number; 私人字符串_name; }}
它显示了以下错误:
{S0}
这是因为用户定义的类CodeProject.UserClass是不可序列化。因此,这种类型的斜面的对象存储在ViewState中。
Serializable属性添加到类定义和运行的代码,将工作做好... .......[Serializable接口()] 公共类UserClass { 公共UserClass() { _number = 1; _name ="cp.comquot;; } 私人诠释_number; 私人字符串_name; }......| Sendilkumar.M

回答

评论会员:游客 时间:2011/12/03
我的地址类。我已序列每UR描述。我做的米类地址的SQL连接。但是当我尝试保存在ViewState中的地址对象,它给了我作为波纹管运行时错误:类型"System.Data.SqlClient.SqlConnection"大会"System.Data,版本=2.0.0.0,文化=中性公钥=b77a5c561934e089'是没有标记为可序列化。请提供帮助,为什么我得到这个错误
DelhiRainbow
评论会员:游客 时间:2011/12/03
只有地址类为可序列化。但是你里面的地址类SqlConnection的实例,这是不实际serilizable.Your的做法是错误的。为什么你要存储到ViewStateSqlConnection类?你仍然要存储,地址class.youimplmentISerializable接口,实现ISerializable的GetobjectData数据和手动序列ViewState.WhenBinaryserializer存储序列化的字节对象是construting从ViewState,你必须deserilize。您需要一个地址类的构造函数,两个参数的SerializationInfo和的StreamingContext。实现GetObjectData-喜欢把所有的信息,你需要打开的SqlConnection,并添加到serilaliztionInfo。写Construtor-想获得所有的信息再次从seralizationInfo和打开的SqlConnection所以,当你做序列化GetObjectData将被调用。当你在做反序列化构造将被调用。公共无效GetObjectData(SerializationInfo中信息的StreamingContext背景){ info.Add("CON_STR的connectionString??)}公共地址(SerializationInfo中信息的StreamingContext上下文){的connectionString=(字符串)info.GetValue("CON_STR???;{BR}}你有同样的方法时要遵循的对象存储在会话和Web应用程序没有InProc会话管理。请参阅imgsrc=http://www.orcode.com/upimg/2011_12_03_04_17_50_0.jpgM.Sendilkumar
lxw99
评论会员:游客 时间:2011/12/03
您好,IM对不起,如果我张贴在错误的地方我的查询。朋友,我的名字是普拉卡什要创建一个数据类型像布尔使用vb.net与自己的价值观。这可能吗?如果我得到这个,那么我的工作将会更容易。如果人有任何想法与我PLZ份额。在此先感谢。与问候,普拉卡什imgsrc=http://www.orcode.com/upimg/2011_12_03_04_17_51_1.gif
MTT
评论会员:游客 时间:2011/12/03
是短期和简单的例子。古普塔的Pankaj