上一篇讨论了集合属性的使用,这一篇我们主要来讨论视图状态的自定义管理.
刚开篇的时后在最后把属性值用视图状态来保存时,得以把当前状态保存下来,关于视图状态的概述,这里不再累赘,没了解过的朋友可以在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
|