ASP.NET 自定义控件从入门到精通3

ASP.NET 自定义控件从入门到精通

 

3 状态管理和Style类

3.1 状态管理

在上一节中,我们成功的开发了一个具有设计器属性的注册控件。现在我们来学习对我们的注册控件进行状态管理。

首先我们回顾一下ASP.NET的页面的生命周期,如图3.1.1所示:

 

 

 

 

3.1.1 ASP.NET 页面的生命周期

这里我们发现,任何页面只要发生了回传就一定会被服务器销毁(除了像Ajax一样的异步回传)。那么就出现了一个问题,我们的自定义控件上所有的属性都会被销毁,而服务器端将无法获取自定义控件的值。

所有的Web页面都是无法保持状态的,我们需要使用ViewState来保持页面的状态。ViewState是属于当前页面的,不会混淆。修改RegisterControl中的代码,代码如下所示:

namespace RegisterControl

{

 

[DefaultProperty("UserName")]

[ToolboxData("<{0}:RegisterControl runat='server' UserName='请输入用户名' />")]

public class RegisterControl : WebControl

{

[Browsable(true)]

[Description("读写属性,获取或设定用户名密码框中的值")]

[Category("杂项")]

public virtual string UserPwd

{

get { return this.ViewState["UserPwd"].ToString(); }

set { this.ViewState["UserPwd"] = value; }

}

 

[Browsable(true)]

[Description("读写属性,获取或设定用户名文本框中的值")]

[DefaultValue("请输入用户名")]

[Category("杂项")]

public virtual string UserName

{

get { return this.ViewState["UserName"]; }

set { this.ViewState["UserName"] = value; }

}

 

protected override void Render(HtmlTextWriter writer)

{

writer.Write(string.Format(@" <table> <caption>用户注册</caption> <tbody> <tr> <td>用户名:</td> <td> <input name='txtUserName' type='text' id='txtUserName' value='{0}' οnfοcus='this.select()' /> </td> </tr> <tr> <td>&nbsp;&nbsp;码:</td> <td> <input name='txtPassword' type='password' id='txtPassword' value='{1}' /> </td> </tr> <tr> <td>确认密码:</td> <td> <input name='txtSecPassword' type='password' id='txtSecPassword' /> </td> </tr> <tr> <td colspan='2'> <input type='submit' name='btnRegister' value='注册' id='btnRegister' /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type='reset' id='btnReset' value='重置' /> </td> </tr> </tbody> </table> ",this.UserName,this.UserPwd));

}

}

}

注意:在ViewState中存储值,需要注意以下一些方面:

1.ViewState中存储的对象必须可以被直接序列化。而且特别需要注意的是,ViewState可针对特定类型转换进行优化,基础数据类型都会被优化。如果存储自定义类型的对象,最好重写GetHash()ToString()等方法,并且自定义类型转换器。

2.存储在ViewState中的信息必须简短,减轻页面压力。

题外话:

今天我看了评论,有人告诉我,我也是刚学的就不要发至首页了。我只想问问:难道初学者的文章发布至首页就是错的?????博客园的首页只是开放给技术权威的???博客园的宗旨是什么呢?你凭什么指导我做什么???你是谁???你是我的师父吗??你是我的领导吗??你是技术权威吗??你是MVP 所以我们这些在你眼中的初学者就没有发文章的必要吗???

我还是一如既往的会把这个系列继续写下去,我只是传播一些大家可能会遗忘、一时想不起的东西,不想去指导谁,同样我也不希望"技术权威"指导我,你觉得这样的东西不好那么请你别看,看了就去举报给管理者,请他建立首页文章审核制度,你来审核。

没有金刚钻、不揽瓷器活,拜托大侠、下雨回家收衣服好吗?????权威??Master??

最后问一句:权威?妖怪?。

转载于:https://www.cnblogs.com/hongbo830521/archive/2009/04/18/1438462.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值