前言:本篇讲解与视图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
{
return HtmlTextWriterTag.Table;
}
}
protected override void RenderContents(HtmlTextWriter writer)
{
//显示用户名
writer.RenderBeginTag (HtmlTextWriterTag.Tr);
writer.RenderBeginTag (HtmlTextWriterTag.Td);
writer.Write(UserName);
writer.RenderEndTag();
writer.RenderBeginTag (HtmlTextWriterTag.Td);
writer.AddAttribute (HtmlTextWriterAttribute.Id, "txtUserName");
writer.AddAttribute (HtmlTextWriterAttribute.Type, "text");
writer.RenderBeginTag (HtmlTextWriterTag.Input);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
//显示用户密码
writer.RenderBeginTag (HtmlTextWriterTag.Tr);
writer.RenderBeginTag (HtmlTextWriterTag.Td);
writer.Write(UserPassword);
writer.RenderEndTag();
writer.RenderBeginTag (HtmlTextWriterTag.Td);
writer.AddAttribute (HtmlTextWriterAttribute.Id, "txtPassword");
writer.AddAttribute (HtmlTextWriterAttribute.Type, "text");
writer.RenderBeginTag (HtmlTextWriterTag.Input);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
//显示登录按钮
writer.RenderBeginTag (HtmlTextWriterTag.Tr);
writer.AddAttribute (HtmlTextWriterAttribute.Colspan, "2");
writer.AddAttribute (HtmlTextWriterAttribute.Align, "center");
writer.RenderBeginTag (HtmlTextWriterTag.Td);
writer.AddAttribute (HtmlTextWriterAttribute.Id, "btnSubmit");
writer.AddAttribute (HtmlTextWriterAttribute.Type, "submit");
writer.AddAttribute (HtmlTextWriterAttribute.Value, "Login");
writer.RenderBeginTag (HtmlTextWriterTag.Input);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
}
}
}