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