首页 / 网页编程 / ASP.NET / 庖丁解牛Asp.net3.5控件和组件开发技术系列—页面状态机制(二)
庖丁解牛Asp.net3.5控件和组件开发技术系列—页面状态机制(二)2011-05-09 MSDN 郑健6.2.4 实现自定义类型视图状态前面对视图状态的概念和原理已经说得比较清楚了,这一节就以一个实例说明ViewState工作原理。建立一个Web自定义控件ViewStateControl,该控件继承于WebControl或Control,代码如下:/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
[ToolboxData("<{0}:ViewStateControl runat=server></{0}:ViewStateControl>")]
public class ViewStateControl : WebControl
{
}
由于WebControl是继承于Control基类的,因此该控件已经具备控件生命周期在视图阶段执行方法LoadViewState和SaveViewState的能力。在控件中增加三个不同类型的属性,如下所示:
/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
private string _text;
[Bindable(true)]
[DefaultValue("")]
[Localizable(true)]
[Category("测试视图状态")]
[Description("没有使用视图状态存储")]
public string Text_NoViewState
{
get
{
return _text;
}
set
{
this._text = value;
}
}
[Bindable(true)]
[DefaultValue("")]
[Localizable(true)]
[Category("测试视图状态")]
[Description("使用ViewState属性来存储数据此属性")]
public string Text_ViewState
{
get
{
String s = (String)ViewState["Text_ViewState"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["Text_ViewState"] = value;
}
}
private FaceStyle _faceStyle;
[PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[NotifyParentProperty(true)]
[Category("测试视图状态")]
[Description("自定义视图状态(实现IStateManager接口)存储此属性")]
public FaceStyle FaceStyle
{
get
{
if (_faceStyle == null)
{
_faceStyle = new FaceStyle();
}
if (IsTrackingViewState)
{
((IStateManager)_faceStyle).TrackViewState();
}
return _faceStyle;
}
}