DataTypeAttribute 类

定义

指定要与数据字段关联的其他类型的名称。

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 ValidationAttribute
Public 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)

适用于

另请参阅