前言:本篇講解與視圖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();
}
}
}