DataTypeAttribute 类  
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
指定要与数据字段关联的其他类型的名称。
public ref class DataTypeAttribute : System::ComponentModel::DataAnnotations::ValidationAttribute[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Method | System.AttributeTargets.Parameter | System.AttributeTargets.Property, AllowMultiple=false)]
public class DataTypeAttribute : System.ComponentModel.DataAnnotations.ValidationAttribute[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Property, AllowMultiple=false)]
public class DataTypeAttribute : System.ComponentModel.DataAnnotations.ValidationAttribute[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Method | System.AttributeTargets.Parameter | System.AttributeTargets.Property, AllowMultiple=false)>]
type DataTypeAttribute = class
    inherit ValidationAttribute[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Property, AllowMultiple=false)>]
type DataTypeAttribute = class
    inherit ValidationAttributePublic Class DataTypeAttribute
Inherits ValidationAttribute- 继承
- 派生
- 属性
示例
以下示例使用 DataTypeAttribute 属性自定义 EmailAddress 数据字段的显示。 电子邮件地址显示为超链接而不是简单文本,动态数据将从内部数据类型推断出来。 示例代码分为三部分,执行以下步骤:
- 它实现元数据分部类和关联的元数据类。 
- 在关联的元数据类中,它通过指定EmailAddress枚举值将 DataTypeAttribute 属性应用于 EmailAddress 数据字段。 这向 Text.ascx 字段模板指示它应自定义电子邮件地址的显示。 
- 它修改 Text.ascx 字段模板以自定义 EmailAddress 数据字段的显示。 
using System;
using System.Web.DynamicData;
using System.ComponentModel.DataAnnotations;
[MetadataType(typeof(CustomerMetaData))]
public partial class Customer
{
}
public class CustomerMetaData
{
    // Add type information.
    [DataType(DataType.EmailAddress)]
    public object EmailAddress;
}
Imports System.Web.DynamicData
Imports System.ComponentModel.DataAnnotations
<MetadataType(GetType(CustomerMetadata))> _
Partial Public Class Customer
End Class
Public Class CustomerMetadata
    ' Add type information.
    <DataType(DataType.EmailAddress)> _
    Public EmailAddress As Object
End Class
<%@ Control Language="C#" 
CodeFile="Text.ascx.cs" Inherits="TextField" %>
<!-- Removed, evaluated in the code behind.
<%# FieldValueString %> -->
<%@ Control Language="VB" 
  CodeFile="Text.ascx.vb" Inherits="TextField" %>
<!-- Removed, evaluated in the code behind.
<%# FieldValueString %> -->
using System;
using System.Linq;
using System.Web.UI.WebControls;
using System.Web.DynamicData;
using System.ComponentModel.DataAnnotations;
public partial class TextField : 
    System.Web.DynamicData.FieldTemplateUserControl {
    protected override void OnDataBinding(EventArgs e)
    {
        base.OnDataBinding(e);
        bool processed = false;
        var metadata = MetadataAttributes.OfType
            <DataTypeAttribute>().FirstOrDefault();
        if (metadata != null)
        {
            if (metadata.DataType == DataType.EmailAddress)
            {
                if (!string.IsNullOrEmpty(FieldValueString))
                {
                    processed = true;
                    HyperLink hyperlink = new HyperLink();
                    hyperlink.Text = FieldValueString;
                    hyperlink.NavigateUrl = "mailto:" + FieldValueString;
                    Controls.Add(hyperlink);
                }
            }
        }
        if (!processed)
        {
            Literal literal = new Literal();
            literal.Text = FieldValueString;
            Controls.Add(literal);
        }
    }
}
Imports System.Linq
Imports System.Web.UI.WebControls
Imports System.Web.DynamicData
Imports System.ComponentModel.DataAnnotations
Partial Public Class TextField
    Inherits System.Web.DynamicData.FieldTemplateUserControl
    Protected Overloads Overrides Sub OnDataBinding(ByVal e As EventArgs)
        MyBase.OnDataBinding(e)
        Dim processed As Boolean = False
        Dim metadata As DataTypeAttribute = _
           MetadataAttributes.OfType(Of DataTypeAttribute)().FirstOrDefault()
        If metadata IsNot Nothing Then
            If metadata.DataType = DataType.EmailAddress Then
                If Not String.IsNullOrEmpty(FieldValueString) Then
                    processed = True
                    Dim hyperlink As New HyperLink()
                    hyperlink.Text = FieldValueString
                    hyperlink.NavigateUrl = "mailto:" + FieldValueString
                    Controls.Add(hyperlink)
                End If
            End If
        End If
        If Not processed Then
            Dim literal As New Literal()
            literal.Text = FieldValueString
            Controls.Add(literal)
        End If
    End Sub
End Class
若要编译和运行示例代码,需要以下各项:
- 任何版本的 Visual Studio 2010 或更高版本。 
- AdventureWorksLT 示例数据库。 有关如何下载和安装 SQL Server 示例数据库的信息,请参阅 Microsoft SQL Server 产品示例:GitHub 上的数据库。 请确保为正在运行的 SQL Server 版本安装正确版本的示例数据库。 
- 数据驱动的网站。 这使你可以为数据库创建数据上下文,并创建包含要自定义的数据字段的类。 有关详细信息,请参阅 - Walkthrough: Creating a New Dynamic Data Web Site using Scaffolding。
注解
通过 DataTypeAttribute 特性,可以使用比数据库内部类型更具体的类型来标记字段。 类型名称是从枚举类型中选择的 DataType 。 例如,可以将包含电子邮件地址的字符串数据字段指定为 EmailAddress 类型。 然后,字段模板会访问此信息,以修改数据字段的处理方式。
使用 DataTypeAttribute 属性的原因如下:
- 为数据字段提供其他类型信息。 为此, DataTypeAttribute 可以将 属性应用于数据模型中的数据字段,并从枚举中指定其他类型名称 DataType 。 处理数据字段的字段模板可以访问此附加元数据类型信息,以确定如何处理字段。 例如,文本字段模板可以为其内部类型为 - String的电子邮件地址生成超链接。
- 将自定义字段模板与数据字段相关联。 然后,将使用指定的自定义字段模板来处理数据字段。 这是使用 属性的 UIHintAttribute 替代方法。 
将 DataTypeAttribute 属性应用于数据字段时,必须执行以下操作:
- 遵循属性使用规则。 
- 实现元数据类,该类包含要向其应用特性的数据字段。 
- 根据需要发出验证错误。 
有关详细信息,请参阅 ASP.NET 动态数据指南。
构造函数
| DataTypeAttribute(DataType) | 使用指定的类型名初始化 DataTypeAttribute 类的新实例。 | 
| DataTypeAttribute(String) | 使用指定的字段模版名初始化 DataTypeAttribute 类的新实例。 | 
属性
| CustomDataType | 获取与数据字段关联的自定义字段模板的名称。 | 
| DataType | 获取与数据字段关联的类型。 | 
| DisplayFormat | 获取数据字段的显示格式。 | 
| ErrorMessage | 获取或设置一条在验证失败的情况下与验证控件关联的错误消息。(继承自 ValidationAttribute) | 
| ErrorMessageResourceName | 获取或设置错误消息资源的名称,在验证失败的情况下,要使用该名称来查找 ErrorMessageResourceType 属性值。(继承自 ValidationAttribute) | 
| ErrorMessageResourceType | 获取或设置在验证失败的情况下用于查找错误消息的资源类型。(继承自 ValidationAttribute) | 
| ErrorMessageString | 获取本地化的验证错误消息。(继承自 ValidationAttribute) | 
| RequiresValidationContext | 获取指示特性是否要求验证上下文的值。(继承自 ValidationAttribute) | 
| TypeId | 在派生类中实现时,获取此 Attribute 的唯一标识符。(继承自 Attribute) | 
方法
| Equals(Object) | 返回一个值,该值指示此实例是否与指定的对象相等。(继承自 Attribute) | 
| FormatErrorMessage(String) | 基于发生错误的数据字段对错误消息应用格式设置。(继承自 ValidationAttribute) | 
| GetDataTypeName() | 返回与数据字段关联的类型的名称。 | 
| GetHashCode() | 返回此实例的哈希代码。(继承自 Attribute) | 
| GetType() | 获取当前实例的 Type。(继承自 Object) | 
| GetValidationResult(Object, ValidationContext) | 检查指定的值对于当前的验证特性是否有效。(继承自 ValidationAttribute) | 
| IsDefaultAttribute() | 在派生类中重写时,指示此实例的值是否是派生类的默认值。(继承自 Attribute) | 
| IsValid(Object) | 检查数据字段的值是否有效。 | 
| IsValid(Object, ValidationContext) | 根据当前的验证特性来验证指定的值。(继承自 ValidationAttribute) | 
| Match(Object) | 当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。(继承自 Attribute) | 
| MemberwiseClone() | 创建当前 Object 的浅表副本。(继承自 Object) | 
| ToString() | 返回表示当前对象的字符串。(继承自 Object) | 
| Validate(Object, String) | 验证指定的对象。(继承自 ValidationAttribute) | 
| Validate(Object, ValidationContext) | 验证指定的对象。(继承自 ValidationAttribute) | 
显式接口实现
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) | 将一组名称映射为对应的一组调度标识符。(继承自 Attribute) | 
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) | 检索对象的类型信息,然后可以使用该信息获取接口的类型信息。(继承自 Attribute) | 
| _Attribute.GetTypeInfoCount(UInt32) | 检索对象提供的类型信息接口的数量(0 或 1)。(继承自 Attribute) | 
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) | 提供对某一对象公开的属性和方法的访问。(继承自 Attribute) |