属性全接触(一)

本系列上篇文章有几位抬爱,鼓励了几句,所以劲头又足了,这不,这篇文章就出得快了,:)
希望能继续得到鼓励和指正。
这次我们来探讨下控件开发中的属性设计的方方面面,属性本是各种.net下语言的最基本语法,但控件做为一种提供给程序员二次开发的发布件,其功能的强大与使用的灵活都离不开良好的属性设计,所以我觉得属性设计是控件开发中第一座要打下的堡垒。
首先我们来看一段.aspx文件中的HTML样式的代码:

<asp:DropDownList id="DropDownList1" runat="server" Font-Bold="True">
 <asp:ListItem Value="1">1</asp:ListItem>
 <asp:ListItem Value="2">2</asp:ListItem>
</asp:DropDownList>

这种代码大家都写过无数次了,不过,现在我们要从另一种角度来分析这段代码:
DropDownList控件在和用户交互时,它没有把它的属性一股脑放在一起来表示出来,而是分为以下几种情况:
1.像ID、Runat、Font-Bold这些,放在<>标记里;
2.Font-Bold不同于其它,它有一个短横分隔成两部分,这种表示方式不是Font-Bold是一个属性的名称,而是说明它是一个子属性,是Font属性(Font类)的Bold属性,对应.cs文件的写法是:Font.Bold;
3.ListItem放在了DropDownList的一双<>标记的中间,而不是标记之类,同样1、2也放在了ListItem的中间。
下面我们来分别看看这几种属性记录方式是怎么实现的。
有一个Attribute来做这件事件PersistenceMode(System.Web.UI.PersistenceModeAttribute)。
它有以下几个值供选择:
Attribute(default)属性保存在控件的标签里;默认值
EnCodedInnerDefaultProperty 属性是编码的HTML,放在控件标签对的中间保存,以上的ListItem就是这样保存Text属性的(1、2);

[PersistenceMode(PersistenceMode.EnCodedInnerDefaultProperty)]
public string Text
{
 
}

InnerDefaultProperty 属性保存在控件标签对的中间,以上的DropDownList控件的Items属性就是这样保存的(就是那堆ListItem);

[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public ListItem Items
{
 get
 {
  
 }
}

InnerProperty 属性和其它属性一起保存为控件标签对中的嵌套内容,DataGrid用这种方式把一堆东西包在标签里,这时,属性要用标签声明,内含属性值。

[PersistenceMode(PersistenceMode.InnerProperty)]
public virtual TableItemStyle ItemStyle
{
      get
      {
            .
      }
}

第二个议题,属性的持久性
众所周知,网页是基于无状态机制的,就是说,页面Response后就不管理保存页面内容的状态,ASP.net提供ViewState机制来保存页面的状态,ViewState是实现方式是送出页面中的一个名为__ViewState的input type='hidden',也就是说它和Session不同,它保存在页面中......不废话了,反正我们要保存控件的状态(就是它的各个属性),而不至于在回传的过程中丢失,我们采用的方案就是ViewState,下面简单的举个例子说明ViewState在Property中的用法

  [
  DefaultValue(2),
  TypeConverter(typeof(Int32Converter)),
  Category("Behavior"),
  Description("Duration of complete once transition.(s)") 
  ]
  public int Duration
  {
   get
   {
    object b = ViewState["Duration"];
    return (b==null)?2:(int)b;
   }
   set
   {
    if(value < 1)
    {
     throw new ArgumentOutOfRangeException("Duration");
    }
    ViewState["Duration"] = value;
   }
  }

像这种方式直接使用ViewState是最简便的,我们不必改写LoadViewState、SaveViewState方法,至于怎么自定义ViewState管理,在后面的文章中将有介绍。

关于属性的东西太多了,这次就写到这,下篇将写写怎样订制属性与IDE的交互。

转载于:https://www.cnblogs.com/think/archive/2005/05/10/152147.html

今天你写控件了吗?----ASP.net控件开发系列(三)相关推荐

  1. ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇

    第三章 为控件添加事件 后篇 前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事件是行不 通.如果大家开发的是WinForm中的事件,之前的定义可能没有什 ...

  2. ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇

    第三章 为控件添加事件 好了,我们之前以前开发一个控件.而且也添加了属性,开发也很规范,但是那个控件还差最后一点:添加事件. 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.N ...

  3. 学习ASP.NET Core Razor 编程系列三——创建数据表及创建项目基本页面

    原文:学习ASP.NET Core Razor 编程系列三--创建数据表及创建项目基本页面 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 ...

  4. [导入]ASP.NET MVC框架开发系列课程(3):URL导向.zip(16.66 MB)

    讲座内容: ASP.NET MVC框架中一个关键特性就是基于URL的导向.本次课程将讲解URL Routing机制的使用. 课程讲师: 赵劼 MSDN特邀讲师 赵劼(网名"老赵". ...

  5. [导入]ASP.NET MVC框架开发系列课程(2):一个简单的ASP.NET MVC应用程序.zip(13.70 MB)...

    讲座内容: 使用ASP.NET MVC框架进行开发与ASP.NET WebForms截然不同.本次课程将通过官方的示例程序简单了解一下ASP.NET MVC应用程序的结构与特点. 课程讲师: 赵劼 M ...

  6. [导入]ASP.NET MVC框架开发系列课程(1):MVC模式与ASP.NET MVC框架概述.zip(8.80 MB)

    讲座内容: ASP.NET MVC框架是既ASP.NET WebForms后的又一种开发方式.它提供了一系列优秀特性,使ASP.NET开发人员拥有了另一个选择.本次课程将对MVC模式ASP.NET M ...

  7. login控件authenticate_关于asp:login控件和验证码的问题?(转)

    1.验证码页面添加.2.将这验证码页面添加到login控件中:拖曳一Login控件,将之切换到模式下,在Html源文件中在表格中密码那行后添加: 验证码:其中ImageUrl="~/publ ...

  8. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

    第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三个基 类:Control,WebControl,还有一个就 ...

  9. ASP.NET自定义控件组件开发 第一章 第二篇 接着待续

    ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 很感谢大家给我的第一篇ASP.NET控件开发的支持!在写这些之前,我也看了一些例 ...

  10. ASP.NET MVC5 网站开发实践 - 概述

    前段时间一直在用MVC4写个网站开发的demo,由于刚开始学所有的代码都写在一个项目中,越写越混乱,到后来有些代码自己都理不清了.1月26日晚上在群里跟@怒放 他们讨论这个问题,结论是即使只是一个小d ...

最新文章

  1. 图像的评价指标之SSMI——结构相似性
  2. cmd命令打开文本文档_震惊!我竟然通过控制台打开了QQ!
  3. buildroot--ubootkernelrootfs全编译工具
  4. 认识和入门 WebRTC
  5. 隐藏帐户与隐藏权限的添加
  6. Windows7无法访问(远程登录)Windows 2003共享问题解决
  7. SpringBoot启动一下就结束了
  8. (八)mybatis之映射器
  9. 内核kconfig语法及原理
  10. 动手学习深度学习的PDF电子版
  11. 接口中的静态方法作用_接口一定要实现,才能为自己所用
  12. 电子签章在商业银行的应用取得重要进展,“6类”场景深化应用
  13. 数据结构试卷三(含答案)
  14. 飞思卡尔16位单片机(七)——SCI串口测试
  15. 组件上传之AspUpload使用方法
  16. 学科基本结构理论-布鲁纳学习理论
  17. SOLIDWORKS工程图导出为DWG图纸
  18. OpenLayers教程一:OpenLayers概述
  19. 微信小程序实现svga格式动画播放
  20. python如何读pst文件_Python 学习 第11篇:文件读写

热门文章

  1. 因为这两天比较忙,所以没有及时把要发表的东西写来.废话少说:我前面把两个简单的滚动说了下.接下来介绍第三种集合循环滚动....
  2. How to go between HK and Shenzhen (Futian)?
  3. ios html cookies,iOS-WKWebView携带cookie发送http请求,cookie失效
  4. python垃圾回收离职_谈谈python垃圾回收机制
  5. html打地鼠游戏设计报告,有趣的Axure案例:打地鼠游戏的设计
  6. mysql数据库教程外联_MySQL--外联语句练习
  7. 注意ajax的同步和异步请求
  8. 32. Longest Valid Parentheses
  9. Corosync Pacemaker 高可用 Mariadb
  10. PHP如何使用GeoIP数据库