构建自定义控件之二——ViewState和ControlState
来源:互联网 发布:动艺网络 编辑:程序博客网 时间:2024/04/28 12:39
ASP.NET利用一个名为_VIEWSTATE的隐藏表单域在回传中保存控件属性的状态。如果想要保存控件的属性值,就要把控件属性值添加到该隐藏的表单域。2.0支持在回传/回发保存值得两种方法:视图状态和控件状态
2.1支持视图状态
使用Control或Page类的ViewState属性把值添加到视图状态。
理论上讲,可以添加任何可序列化类的实例到ViewState,但在实践中,应当只添加间的地值到ViewState,否则会影响页面的执行效率。
代码示例:ViewStateControl.cs
using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace JerryShi.Controls
{
public class ViewStateControl : WebControl
{
private string _text;
public string Text
{
get { return _text; }
set { _text = value; }
}
public string ViewStateText
{
get
{
if (ViewState["ViewStateText"].Equals(null))
{
return string.Empty;
}
else
{
return ViewState["ViewStateText"].ToString();
}
}
set
{
ViewState["ViewStateText"] = value;
}
}
protected override void RenderContents(HtmlTextWriter writer)
{
writer.Write("Text:" + Text);
writer.WriteBreak();
writer.Write("ViewStateText:" + ViewStateText);
writer.WriteBreak();
}
}
}
注:ViewState在页面InitComplete事件之后才进行加载,在页面PreRenderComplete事件之后进行保存。所以我们不应该在InitComplete事件之前或之中检索视图状态,也不应在PreRenderComplete事件之后向视图状态添加值。
2.2支持控件状态
与视图状态不同的是:控件状态无法禁用,而视图状态可以通过设置控件的EnableViewState属性为False禁用。
注:将最重要的信息保存在ControlState中。
代码示例:ControlStateControl.cs
using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace JerryShi.Controls
{
public class ControlStateControl : WebControl
{
private string _controlStateText;
public string ControlStateText
{
get { return _controlStateText; }
set { _controlStateText = value; }
}
public string ViewStateText
{
get
{
if (ViewState["ViewStateText"].Equals(null))
{
return string.Empty;
}
else
{
return ViewState["ViewStateText"].ToString();
}
}
set
{
ViewState["ViewStateText"] = value;
}
}
protected override void OnInit(EventArgs e)
{
Page.RegisterRequiresControlState(this);
base.OnInit(e);
}
protected override object SaveControlState()
{
return _controlStateText;
}
protected override void LoadControlState(object savedState)
{
_controlStateText = savedState.ToString();
}
protected override void RenderContents(HtmlTextWriter writer)
{
writer.Write("ViewStateText:" + ViewStateText);
writer.WriteBreak();
writer.Write("ControlStateText:" + ControlStateText);
writer.WriteBreak();
}
}
}
重写了WebControl基类的OnInit()、SaveControlState()、LoadControlState()方法。
OnInit——初始化控件
SaveControlState——保存视图状态
LoadControlState——加载视图状态
- 构建自定义控件之二——ViewState和ControlState
- Asp.Net底层解析(二)——视图状态ViewState与控件状态ControlState详解
- 保存页面数据的场所——Hidden、ViewState、ControlState
- ViewState——自定义状态管理(二)
- 隐藏域--ViewState--ControlState
- ASP.NET状态管理之五:隐藏域、ViewState、ControlState
- ASP.NET状态管理之五:隐藏域、ViewState、ControlState
- 构建自定义控件之四——控件属性集合
- 构建自定义控件之三——处理回传数据和事件
- 构建自定义控件之五——自定义控件集成javascript
- ASP.NET状态管理之十二(控件状态ControlState)
- C#学习总结之二——自定义控件
- 自定义控件 — ViewPagerIndicator(二)
- ViewState和用户自定义数据类型
- android 自定义控件之二
- Android自定义控件之自定义View(二)
- ControlState和ControlStyle属性详解
- 构建自定义控件系列之一——概述
- destroy, free, freeAndNil, release用法和区别
- 马云小演讲,道破创业成功关键
- 构建自定义控件系列之一——概述
- 和大家交个朋友
- 声明
- 构建自定义控件之二——ViewState和ControlState
- SVN官方网站
- 利用微软IIS架设ASP服务器方法
- Struts2:struts.xml常用配置解析收藏
- ActionScript像素级碰撞检测
- 一行转多行,一条记录转多条记录(sql server 2000)
- Talisman Desktop
- 在Ubuntu上用gfceu玩FC游戏
- 《HP大中华区总裁孙振耀退休感言》