一、属性实现交互
我们还是沿用上面的例子来添加属性 PicShow示例:

































二、视图状态
底下我们在一个项目中应用此控件,但我们发现,这样的控件的属性的状态是没法维持的。也就是说,它永远只能维持我们初始给它的值。
举个例子:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ControlSatePic.aspx.cs" Inherits="ControlSatePic" %>

<%@ Register Assembly="HenllyeeConrol" Namespace="MyConrol1" TagPrefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>示例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<cc1:PicShow ID="" runat="server"
ImgUrl="Images/1109508867.jpg">
</cc1:PicShow>
<asp:Button ID="btnChange" Text="Change Picture" runat="server"
onclick="btnChange_Click" />
</div>
</form>
</body>
</html>





















我们通过按钮来改变其属性:











运行后我们会发现,我们的图片只能改变一次。原因很简单,客户端发出http请求后,服务器端并没有帮我们去维持上一次的请求信息。
在有的时候我们必须要求其维持状态。状态分为两种:一个是视图状态,一个是控件状态。
视图状态在脚本中的表现为:保存到一个叫"_VIEWSTATE"的隐藏域中去,这样来实现保存上次的用户请求。视图状态是一个集合(ViewState)。
我们来继承一个PicShow















三、控件状态
我们会发现如果用户禁止使用了视图状态的话(在<%Page%>中添加EnableViewState="false"),我们还是维持不了用户的上次请求,这时我们可以通过控件状态来永远地维持。
控件状态的维持一般分为三步:1.通过Page.RegisterRequiresControlState()方法来通知控件运行时所在的页面,把此控件维持成控件状态。
2.重写SaveControlState()方法来保存控件状态的值。
3.最后再将控件状态的值返回到属性中去。
控件状态示例:


















