ASP.NET服务器控件视图浅析

 我来答
科创17
2022-10-17 · TA获得超过5918个赞
知道小有建树答主
回答量:2846
采纳率:100%
帮助的人:177万
展开全部

  ASP NET服务器控件视图的必要性 如果我们的服务器控件需要较完备的GUI 譬如需要控制HTML元素的附加属性字体 颜色 高度等 那么应当从Control的子类WebControl继承 以得到所需的基础性能 从WebControl类派生 需要遵守通常如下的约定

   包含从System Web UI WebControl的命名空间的引用

   不能够重载Render方法直接向输出流提供数据 而应当重载RenderContents方法来实现

   通常情况下 WebControl的派生类最终在输出流中表现为<span>标签 但是如果自己希望使用其它的标签 就应当重载WebControl的tagKey属性或者TagName属性

  ASP NET服务器控件视图学习的经验(或者说MS建议)

   如果控件生成非可视化元素或显示给非HTML客户端 那么应当选用Control作为符类继承 如<meta><xml>等标签

   提供HTML界面的从WebControl继承

   扩展修改功能时应当从一个已存控件派生 但是不要从System Web UI HtmlControls命名空间派生 因为设计器不承认从该类派生的控件

  为了能够支持设计器 实现设计期 那么需要考虑attribute(元数据)的编程

  ASP NET服务器控件视图之视图状态

  Web编程很重要的一个方面是状态管理 也就是解决在无状态的协议基础上的状态管理问题 在asp类web编程技术时代 这通常通过以下技术手段来解决

   Session

   Cookies

   隐藏变量

   URL携参

  然而 以上方案都有自身的缺陷 譬如Session不宜扩展 Cookies在特定情况下可能不可用 隐藏变量不易管理 URL携参有长度限制且容量有限

  综合考虑 MS提出了基于隐藏变量方案的ViewState(视图)的概念 通过视图保存 个ASP NET页间的服务器端控件状态 视图是如何工作的呢?

  在处理一个Web请求后 页面框架会收集页面控件树中所有控件的状态并且创建一个视图对象 每一个Control都有一个ViewState字典保存自己的状态 当输出到客户时将全部ViewState进行串行化为一个字符串表达式 作为隐含变量发送到客户端 通常情况下我们将视图的串行化子符串在服务器同客户端间进行传递 上一个请求的隐含变量会回传到服务器端进行并行化 然后 还原 给服务器控件 本质上 是一个隐含变量 但是在隐含变量基础上加入了ASP NET的管理功能 这就是视图的本质

  Control的EnableViewState决定了控件是否同意将自己的状态交给自动化的视图管理

  当一个控件需要保存状态时候 没人可以支持保存的属性为int boolean 等 简单原生 数据类型 如果是较为复杂的属性值类型 需要编程者提供类型转换器 将值数据转换为字符串 若未提供

  那么采用代价高昂的二进制串行化功能(逐个byte的进行) 视图数据在传递过程中通过传递一个附加的摘要来确保数据不被篡改(但无法保证不被窥探 毕竟base 编码近乎明文)

lishixinzhi/Article/program/net/201311/12501

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式