浅谈ASP.NET内部机制(七)
--- 视图状态实战篇
前言:本篇讲解与视图ViewState相关的知识,包括IStateManager,自定义转换器TypeConvert,以及和视图功能相同的控件状态。可以说本篇是对保存状态有关知识的总结,代码也详细的给出。。。。。。。。
自从上次写了有关视图的文章后,收到了很多朋友的邮件,很感谢大家的支持:)很多朋友都说要求说说实践性更强的东西,所以本篇就进一步的来谈谈视图(不仅仅只是视图,而且在ASP.NET中的状态保存的话题)。首先希望大家对自定义控件有一定的了解。大家可以去参看我的控件开发系列。
首先我看从一个简单的控件开发来谈起,我们在ASP.NET有Login的登录控件,我们现在就来自己来实现一个类似的控件,因为本篇主要讲述与视图有关的话题,所以关于事件冒泡等我们不提及,主要是为了使得代码简洁,易懂,集中讲述一个问题。
实现自定义Login控件有很多的方式,我这里会带着大家一步步的做,首先我们继承WebControl来实现一个控件,然后我们再改进例子,我们来看看从WebControl继承的Login控件:
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
namespace CustomComponents
{
/// <summary>
///MyLogin 的摘要说明
/// </summary>
public class MyLogin:WebControl
{
#region 属性
public string UserName
{
get
{
return ViewState["UserName"] != null ? (string)ViewState["UserName"] : "UserName";
}
set
{
ViewState["UserName"] = value;
}
}
public string UserPassword
{
get
{
return ViewState["UserPassword"] != null ? (string)ViewState["UserPassword"] : "UserPassword";
}
set
{
ViewState["UserPassword"] = value;
}
}
#endregion
protected override HtmlTextWriterTag TagKey
{
get