zoukankan      html  css  js  c++  java
  • 今天你写控件了吗?ASP.net控件开发系列(三)

    属性全接触(一)

    本系列上篇文章有几位抬爱,鼓励了几句,所以劲头又足了,这不,这篇文章就出得快了,:)
    希望能继续得到鼓励和指正。
    这次我们来探讨下控件开发中的属性设计的方方面面,属性本是各种.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的交互。

  • 相关阅读:
    看了陈安之的文字 无论怎样 都要记住的是 你仍然是你自己 改变是应用他人的方法提高自己 改变是做更优秀更独特的自己
    流行的Ajax应用演示和源码下载(转)
    WEB2.0概念诠释(根据网络资料归纳)之一
    ASP.NET中文件上传下载方法集合(较为详细的介绍 转)
    建立梦想清单
    Ajax的应用
    Ajax的问题
    WEB2.0概念诠释(根据网络资料归纳)之三
    IIS突然挂掉
    VS2008软件90天过期,解决升级问题。
  • 原文地址:https://www.cnblogs.com/think/p/152147.html
Copyright © 2011-2022 走看看