ASP.NET2.0服务器控件之类型转换器

  类型转换器是实现自定义服务器控件属性过程中比较重要的内容。本文将对类型转换器的基本概念和实现方法进行介绍。

  1. 类型转换器基本概念

  类型转换器是自定义服务器控件的辅助性功能实现。它主要用于执行从字符串表示形式到指定类型之间的双向转换。例如,以文本形式表示属性值,将用户输入的文本转换为相应数据类型等等,都应用了类型转换器。

  对于多数基本数据类型(如Int32、Bool、Char、String、枚举类型等),.net框架已经为它们提供了默认的类型转换器,这些类型转换器完成从字符串到相关值的转换并执行验证检查的功能。默认的类型转换器派生自System.ComponentModel.TypeConverter类,名为TypeConverterNameConverter。例如,当开发人员在*.ASPx文件中设置服务器控件属性时会发现,某些属性值为基本类型,即Bool、Char、Enum、Int等,但是,一律被设置为String类型,这就牵扯到一个类型转换的问题。例如,属性Height="150px",属性值"150px"在设置时是String类型,而这里的属性值应当作为Unit类型,那么所面临的问题就是必须要求页面编译器将字符串"150px"转换为Unit类型。通常情况下,对于属性值为基本类型的属性,页面编译器将自动应用相关的类型转换器完成转换工作。在刚才的例子中,页面编译器将自动调用类型转换器System.Web.UI.WebControls.UnitConverter完成String类型与Unit类型之间的相互转换。

  然而,上面的方法只能解决少数比较简单的类型转换问题,并且在多数情况下,相关的类型转换过程都是默认自动完成的。当默认类型转换器无法满足需要时,例如,对于复杂属性的情况,是没有关联的默认类型转换器时,则可以通过实现自定义类型转换器来实现。

  自定义类型转换器是本文的重点内容。按照自定义类型转换器的功能分类,可以将自定义类型转换器分为3种:

  · 值翻译的类型转换器;

  这种类型转换器最为常见,它主要完成从字符串到值得转换,或用于在设计时和运行时进行数据类型之间的双向翻译。例如,实现从String类型转换为表示在二维平面中定义点的、整数X和Y坐标的有序对Point类型,或者从Point类型转换为String类型。此处的String类型与Ponit类型之间的双向转换,则需要实现一个值翻译的类型转换器。

  · 向属性窗口提供标准值列表的类型转换器;

  在Visual Studio 2005中包括控件属性窗口。类型转换器可以为属性窗口中控件的类型提供一个值列表。当开发人员单击值列表时,则可以方便的在下拉列表中设置属性的值。

  · 在运行时为属性初始化生成代码的类型转换器;

  .NET Framework 提供了在设计时生成动态属性初始化代码(此代码在运行时初始化属性)的功能。开发人员可以构建一个产生基于构造函数的初始化代码的类型转换器。为了在运行时配置类型属性,这些类型转换器可以使用在设计时设置的值来动态生成构造函数代码。类型转换器实现逻辑以配置属性的类型和构造函数的值。

  实现以上3种类型转换器都要求自定义类型转换器的类必须继承自System.ComponentModel.TypeConverter基类,或者TypeConverter类的已有子类。下面简单介绍一下TypeConverter及其子类的基本情况。

  TypeConverter类主要提供了一种将值的类型转换为其他类型,以及访问标准值和子属性的统一方法。该类包括多个成员方法。对于创建自定义类型转换器而言,读者应了解以下几个常见方法:

  (1)CanConvertFrom方法:返回该转换器是否可以将一种类型的对象转换为此转换器的类型。

  (2)ConvertFrom方法:将给定值转换为此转换器的类型。

  (3)CanConvertTo方法:返回此转换器是否可将该对象转换为指定的类型。

  (4)ConvertTo方法:将给定值对象转换为指定的类型。

  (5)IsValid方法:返回给定值对象对于此类型是否有效。

  (6)GetStandardValuesSupported方法:返回此对象是否支持可以从列表中选取的标准值集。

  (7)GetStandardValues方法:返回此类型转换器设计用于的数据类型的标准值集合。

  TypeConverter类是实现类型转换器的基础。为了支持默认类型转换功能,ASP.NET 2.0还对TypeConverter类进行了扩展,其内置了多个派生类。例如,CharConverter、DateTimeConverter、ExpandableObjectConverter、EnumConverter等。它们在完成类型转换的同时,还可以帮助开发人员创建自定义类型转换器,例如,可创建继承自ExpandableObjectConverter类的类型转换器,该基类提供了在可扩展对象与其他各种表示形式之间实现转换的类型转换器。这样就可以简化(相对于从TypeConverter基类)创建类型转换器的过程。

  另外,在使用已有类型转换器过程要注意:无论何时都不要直接访问类型转换器。而应通过使用TypeDescriptor调用适当的转换器。

  当实现类型转换器之后,可以使用如下方法应用类型转换器。

[TypeConverter(typeof(MyClassConverter))]
public class MyClass {
 // Insert code here.
}

  以上代码显示了类型转换器的应用方法。其通知MyClass使用名为MyClassConverter的类型转换器。此示例假定已在其他位置实现了MyClassConverter。在应用过程中需要注意,元数据属性TypeConverter通常应用于复杂属性或数据成员,以将其与类型转换器关联。如果将TypeConverter应用于类型,则不必将其再次应用于该类型的属性或数据成员。

(0)

相关推荐

  • C#设置页面单位和缩放的方法

    本文实例讲述了C#设置页面单位和缩放的方法.分享给大家供大家参考.具体如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace advanced_drawing { public partial cl

  • C#简易图片格式转换器实现方法

    本文实例讲述了C#简易图片格式转换器实现方法.分享给大家供大家参考,具体如下: 在窗体上放一个picturebox,menustrip.在菜单上键入两个按钮,分别为"文件","格式".在"文件"下创建一个子菜单"打开",name为menuOpen,在"格式"下创建一个子菜单"转换格式",name为menuConvert. using System; using System.Collec

  • C#单位转换器简单案例

    经过几天学习,写出了一个简单的winform应用程序,贴出源码,以备不时之需. 软件启动后的界面如下图所示: 如图,该程序由6个label.8个comboBox.8个textBox和4个button组成.右边4个textBox设置ReadOnly属性为true. 软件启动时,可以让comboBox显示默认项,需要用到comboBox.SelectedIndex语句,默认情况下,comboBox.SelectedIndex="-1"(即默认不显示任何项),将-1改为0即可显示第一项.将代

  • C#实现将像素转换为页面单位的方法

    本文实例讲述了C#实现将像素转换为页面单位的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Drawing2D; namespa

  • ASP.NET2.0服务器控件之类型转换器

    类型转换器是实现自定义服务器控件属性过程中比较重要的内容.本文将对类型转换器的基本概念和实现方法进行介绍. 1. 类型转换器基本概念 类型转换器是自定义服务器控件的辅助性功能实现.它主要用于执行从字符串表示形式到指定类型之间的双向转换.例如,以文本形式表示属性值,将用户输入的文本转换为相应数据类型等等,都应用了类型转换器. 对于多数基本数据类型(如Int32.Bool.Char.String.枚举类型等),.net框架已经为它们提供了默认的类型转换器,这些类型转换器完成从字符串到相关值的转换并执

  • ASP.NET2.0服务器控件之Render方法

    控件呈现是指向HTTP输出流中写入标记文本的过程.服务器通过HTTP输出流向客户端发送生成的标记文本,这些文本将会通过客户端浏览器转换为可视化的元素显示出来.使用控件呈现,开发人员可以将HTML标记.脚本代码.CSS样式表等等输入到客户端浏览器.实现服务器控件呈现主要有两种方式:一是Control类的Render方法,二是WebControl的RenderContents方法.本文重点介绍使用Control类的Render方法实现控件呈现的应用. 使用HtmlTextWriter类 Contro

  • ASP.NET2.0服务器控件之自定义状态管理

    在前面的系列文章中,我们曾经介绍了视图状态和控件状态的基本概念和典型应用,从中可以发现,视图状态和控件状态对于自定义服务器控件实现的重要性.本文将继续这一主题,重点介绍实现视图状态和控件状态自定义管理的方法. 自定义视图状态管理 在介绍视图状态时,我们曾经提到过:对于简单属性,例如,String.Int等类型,.NET执行引擎将自动启用默认视图状态管理机制,以便完成相应的功能.然而,如果开发人员在ViewState中保存的是自定义数据类型,或者需要实现自定义方式优化视图状态管理时,则必须实现自定

  • ASP.NET2.0缓存(Cache)技术深入理解

    ASP.NET2.0提供了一些新的用于提升程序性能的技术特性,其中,缓存技术是非常重要的一个特性,它提供了一种非常好的本地数据缓存机制,从而有效的提高数据访问的性能. 数据缓存(DataCaching)就是将数据暂存于内存缓存区中(有时也暂存于硬盘缓存区中)的一种技术.当数据本身改变得不怎么频繁,而被访问的频率又比较高时,采用这种技术将大大提高警惕数据访问的效率. 1.网页输出缓存 (1)加显缓存 <%@OutputCacheDuration="60"VaryByParam=no

  • Asp.Net2.0权限树中Checkbox的操作

    这里使用asp.net2.0的TreeView控件结合JavaScript实现权限树的部分功能. 假设权限树中有如下三条规则: 1.该节点可以访问,则他的父节点也必能访问: 2.该节点可以访问,则他的子节点也都能访问: 3.该节点不可访问,则他的子节点也不能访问. 代码如下://获取元素指定tagName的父元素function public_GetParentByTagName(element, tagName) {    var parent = element.parentNode;   

  • 在ASP.NET2.0中通过Gmail发送邮件的代码

    在这里我们主要是使用Gmail,究其原因,是因为,我在使用Gmail的邮箱发送邮件的时候,遇到一小小的困难,而使用163等邮箱的时候,没遇到这个问题.     在ASP.NET2.0中,发送邮件是很简单的,我们主要使用来自命名空间System.Net.Mail中的几个类,MailMessage和SmtpClient.     核心代码是很简洁的,如下:     复制代码 代码如下: string to = "这里填写接收者的Email地址";      string from = &q

  • ASP.NET2.0 WebRource,开发微调按钮控件

    现在.有许多开发人员已经在使用ASP.NET2.0的WebResource的功能了.WebResource允许我们嵌入资源到程序集中.包括图像,文本等. 在介绍WebResource就不得不介绍一下WebResource.axd,我们来看一下 script language="javascript"     src="WebResource.axd?a=s&r=WebUIValidation.js&t=631944362841472848"    

  • asp.net2.0如何加密数据库联接字符串

    asp.net2.0如何加密数据库联接字符串 在asp.net2.0中,发布网站时,加密web.config,这样可以有效保证数据库用户和密码安全,其步骤如下: 1.添加密钥 执行:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pc "hnlaw" -exp 其中"hnlaw"为密钥名称 2.添加web.config节点 在web.config的<configuration>&l

  • ASP.NET2.0+SQL Server2005构建多层应用第1/4页

    [推荐]ASP.NET2.0+SQL Server2005构建多层应用!!!!!@申请加分!@@! [sell=5]随着.NET 2.0的发布,将会使得使用ASP.NET 2.0来构建的Web应用越来越容易.使用ASP.NET 2.0和SQL Server 2005,将会比ASP.NET 1.1更方便地构建多层体系架构的web应用.本文,将使用ASP.NET 2.0和SQL Server 2005 (.net使用Visual Studio 2005 beta 2,SQL Server 2005使

  • ASP.NET2.0:页面中链入的CSS、js文件带中文时需注意

    当定义的样式中有中文时,如 .sometyle {font-family:@黑体;},如果书写不正确,如写成 .sometyle {font-family: 黑体;},这应该是个错误的写法,这样不仅这个样式不起作用,而且还会影响到定义在它后面的样式起作用,不知道对css的解析本来就是这个规则,还是ASP.NET 2.0的问题. 当你直接把从网上download下来的js文件加入的VS2005项目中时,如果此文件中带中文,当你调用其方法时,就会出现对象找不到的js错误,就像你没有链如该文件一样.你

随机推荐