在前面的讲解中,控件的属性的类型都是基本类型、字符串等简单类型,这些类型我们不用做任何的额外工作,就可以把控件的属性持久化到控件的标签中(保存在aspx[Source]里),但是我们开发的控件的属性不可能全部是这样的简单类型,比如有时也会遇到属性为Size这样的复杂属性,为了使这样的属性持久化,我们还必须做其它的工作,就这是我们这章主要内容。
        对复杂属性进行持久化,我们有两种方式(可以单独使用,也可以相互配合):
        1、 使用TypeConvert把复杂属性转化为简单类型string,以能持久化到控件的标签中。
        2、 串行化复杂属性的元数据。

        上述的两种方式,并不是Asp.net控件所特有的,而是Component的特性,而Asp.net的服务器控件又是从Component派生下来的。
        如果通过串行化复杂属性元数据的方式来持久化复杂属性,又有两种方式:
        A、通过“属性名-子属性名”语法来表示,如:
        Size-Height,Size就是复杂属性名,Height则是Size的属性,也就是Size的属性的元数据。
        
        B、通过内部属性持久化(Inner property persistence),如:
        <cc1:WebCustomControl1 ID="WebCustomControl1_1" runat="server">
                <Size Width="30"  Height="20" />
        </cc1:WebCustomControl1>

        在默认情况下,复杂属性的持久化是通过上述的方式A来实现的,下面就是我通过A方式来持久化复杂属性的一个例子:

Asp.net服务器控件编程(5) 复杂属性using System;
Asp.net服务器控件编程(5) 复杂属性
using System.Collections.Generic;
Asp.net服务器控件编程(5) 复杂属性
using System.ComponentModel;
Asp.net服务器控件编程(5) 复杂属性
using System.Text;
Asp.net服务器控件编程(5) 复杂属性
using System.Web;
Asp.net服务器控件编程(5) 复杂属性
using System.Web.UI;
Asp.net服务器控件编程(5) 复杂属性
using System.Web.UI.WebControls;
Asp.net服务器控件编程(5) 复杂属性
Asp.net服务器控件编程(5) 复杂属性
namespace WebControlLibrary1


效果如图1:
Asp.net服务器控件编程(5) 复杂属性Asp.net服务器控件编程(5) 复杂属性
        方式B我也举了一个实例,在这个例子中同时包含了TypeConvert的用户,因为TypeConvert也是WebControl从Component上继承下来的,所以其用户和Component的TypeConvert的用法一样,有关TypeConvert的详细讲解请看:http://mapserver.cnblogs.com/archive/2006/03/20/353722.html,效果如上图2。

Asp.net服务器控件编程(5) 复杂属性using System;
Asp.net服务器控件编程(5) 复杂属性
using System.Collections.Generic;
Asp.net服务器控件编程(5) 复杂属性
using System.ComponentModel;
Asp.net服务器控件编程(5) 复杂属性
using System.Text;
Asp.net服务器控件编程(5) 复杂属性
using System.Web;
Asp.net服务器控件编程(5) 复杂属性
using System.Web.UI;
Asp.net服务器控件编程(5) 复杂属性
using System.Web.UI.WebControls;
Asp.net服务器控件编程(5) 复杂属性
Asp.net服务器控件编程(5) 复杂属性
namespace WebControlLibrary1
}

        如果在本文中发现有什么不妥的地方,请朋友们给与指点,小弟在此先谢过。
       

相关文章: