上一篇討論了集合屬性的使用,這一篇我們主要來討論視圖狀態的自定義管理.
剛開篇的時後在最後把屬性值用視圖狀態來保存時,得以把當前狀態保存下來,關於視圖狀態的概述,這裡不再累贅,沒了解過的朋友可以在MSDN裡輸入視圖狀態概述了解一下.以下我們還是以以前講過的內容為例,一起繼續來改善控件的使用(第五篇和第九篇的例子)
示例一
我們啟用了跟蹤,按下確定按鈕後,控件屬性發生變化,按下無事件按鈕後,控件狀態則恢復到之前的狀態,而且在跟蹤狀態下發現Custom無視圖狀態.
<%@ Page Language="C#" Trace="true" %>
<%@ Register Assembly="CustomComponents" Namespace="CustomComponents" TagPrefix="custom" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{
Custom1.Age = 21;
Custom1.CustomMetier = Metier.教師;
Custom1.CustomAddress.City = "杭州";
Custom1.CustomAddress.State = "中國";
Custom1.CustomAddress.Street = "街道";
Custom1.CustomAddress.Zip = "310000";
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>無標題頁</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<custom:Custom ID="Custom1" runat="server">
</custom:Custom>
<br />
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="確定" />
<asp:Button ID="Button2" runat="server" Text="無事件" />
</div>
</form>
</body>
</html>
那麼接下來將修改Custom的屬性更改為視圖狀態保存,代碼如下
重新編譯一下代碼,再次測試上面代碼Custom的Age和CustomMetier屬性可以保存其狀態,而無法保存CustomAddress這個復雜屬性的狀態值.這個也可以理解,我們沒有為CustomAddress的子屬性值保存在視圖狀態裡.啟動跟蹤後,還發現Custom控件在更改控件屬性後保存了一部分的視圖狀態.
屬性#region 屬性
[Description("年齡")]
public int Age
{
get { return ViewState["Age"] != null ? (int)ViewState["Age"] : 0; }
set { ViewState["Age"] = value; }
}
[Description("姓名")]
public String Name
{
get { return ViewState["Name"] != null ? (string)ViewState["Name"] : string.Empty; }
set { ViewState["Name"] = value; }
}
[TypeConverter(typeof(GameConverter))]
[Description("喜歡的游戲")]
public String Game
{
get { return ViewState["Game"] != null ? (string)ViewState["Game"] : string.Empty; }
set { ViewState["Game"] = value; }
}
[Description("職業")]
public Metier CustomMetier
{
get { return ViewState["CustomMetier"] != null ? (Metier)ViewState["CustomMetier"] : Metier.程序員; }
set { ViewState["CustomMetier"] = value; }
}
#endregion