状态视图与用户自定义数据类型

 

序言

在这篇文章中,我将与大家分享一些关于状态视图的概念。

状态维护

WEB无状态是状态是由于它是基于无状态的HTTP协议。默认情况下,客户端程序请求服务器里它们之间并不维持状态。不过通过一些技术可以实现状态的维持,我们下面列出了三种不同的状态类型:

  1. 页面级别
  2. 用户级别
  3. 应用程序级别

状态视图是属于页面级状态,其余的两个不属于本文讨论范围。

在ASP.NET里,Control.ViewState 是使控在服务器的请求与相应间保留控件的值。

状态视图如何工作?

 如果你在页面上设置Form 的ViewState属性为Enabled,在浏览该页面时,查看该页面把生成的HTML代码,你将看到下列这样一段代码:

< input  type ="hidden"  name ="__VIEWSTATE"  
       value
="DDDF22DDFD3453333D2DDDFDFD332133=="   />

这个在页面自动添加的隐藏控件存储着当前页面上所有控件的值并发送给浏览器。如果页面重新载入,状态视图的两个方法就会被触发,LoadViewState()SaveViewState()。数据将加载到相应的控件里。

状态视图可以存些什么?

状态视图可以存储类型和对象,不过对象是可以序列化或拥有类型转换器的。序列号是把对象数据转换成一种基于流输出的一种处理,并可以通过这种基于流的数据构建一个相同的对象。在这,我们应该意识到序列化在状态视图的角色。先前,我们看见隐藏控件把存储的数据就是通过序列化的。

用户定义类型

用户可以定义它们自己的类型, 如结构、类。如果你想玩弄用户类型与状态视图,你就必需专心地定义它们。

运行下面这段代码:

< PRE lang = cs id = pre1 style = " MARGIN-TOP: 0px "  nd = " 21 " > using  System;
using  System.Collections;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Web;
using  System.Web.SessionState;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.HtmlControls;

namespace  CodeProject
{
 
public class WebForm1 : System.Web.UI.Page
 
{
    
private void Page_Load(object sender, System.EventArgs e)
    
{
        UserClass UC
=new UserClass();
       
this.ViewState["Key"]=UC;
       Response.Write(
"View State is workng..");
      }


      
Web Form Designer generated code
 }


 
public class UserClass
 
{
      
public UserClass()
    
{
        _number
=1;
        _name
="cp.com";
      }

      
private int _number;
      
private string _name;
 }

}
</ PRE >

就会出现下列此图所示的错误:

因为这个CodeProject.UserClass类型没有被序列化,因此这个对象不能存储到状态视图里。

给CodeProject.UserClass加一个序列化的特性,这段代码就可以正常运行。

…………………………..
…………………………..
…………………………..

[Serializable()] 
 
public   class  UserClass
 
{
 
  
public UserClass()
  
{
    _number
=1;
    _name
="cp.com";
  }

  
private int _number;
  
private string _name;
 }


…………………………..
…………………………..
…………………………..

原文:http://www.codeproject.com/aspnet/ms_viewstate.asp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值