ASPNET服务器控件视图的必要性如果我们的服务器控件需要较完备的GUI譬如需要控制HTML元素的附加属性字体颜色高度等那么应当从Control的子类WebControl继承以得到所需的基础性能从WebControl类派生需要遵守通常如下的约定
包含从SystemWebUIWebControl的命名空间的引用
不能够重载Render方法直接向输出流提供数据而应当重载RenderContents方法来实现
通常情况下WebControl的派生类最终在输出流中表现为<span>标签但是如果自己希望使用其它的标签就应当重载WebControl的tagKey属性或者TagName属性
ASPNET服务器控件视图学习的经验(或者说MS建议)
如果控件生成非可视化元素或显示给非HTML客户端那么应当选用Control作为符类继承如<meta><xml>等标签
提供HTML界面的从WebControl继承
扩展修改功能时应当从一个已存控件派生但是不要从SystemWebUIHtmlControls命名空间派生因为设计器不承认从该类派生的控件
为了能够支持设计器实现设计期那么需要考虑attribute(元数据)的编程
ASPNET服务器控件视图之视图状态
Web编程很重要的一个方面是状态管理也就是解决在无状态的http协议基础上的状态管理问题在asp类web编程技术时代这通常通过以下技术手段来解决
Session
Cookies
隐藏变量
URL携参
然而以上方案都有自身的缺陷譬如Session不宜扩展Cookies在特定情况下可能不可用隐藏变量不易管理URL携参有长度限制且容量有限
综合考虑MS提出了基于隐藏变量方案的ViewState(视图)的概念通过视图保存个ASPNET页间的服务器端控件状态视图是如何工作的呢?
在处理一个Web请求后页面框架会收集页面控件树中所有控件的状态并且创建一个视图对象每一个Control都有一个ViewState字典保存自己的状态当输出html到客户时将全部ViewState进行串行化为一个字符串表达式作为隐含变量发送到客户端通常情况下我们将视图的串行化子符串在服务器同客户端间进行传递上一个请求的隐含变量会回传到服务器端进行并行化然后还原给服务器控件本质上是一个隐含变量但是在隐含变量基础上加入了ASPNET的管理功能这就是视图的本质
Control的EnableViewState决定了控件是否同意将自己的状态交给自动化的视图管理
当一个控件需要保存状态时候没人可以支持保存的属性为int boolean 等简单原生数据类型如果是较为复杂的属性值类型需要编程者提供类型转换器将值数据转换为字符串若未提供
那么采用代价高昂的二进制串行化功能(逐个byte的进行)视图数据在传递过程中通过传递一个附加的摘要来确保数据不被篡改(但无法保证不被窥探毕竟base编码近乎明文)
ASPNET服务器控件视图方面的内容就简单的向你介绍到这里希望对你学习ASPNET服务器控件视图方面有所帮助