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)

將一組名稱對應至一組對應的分派識別項 (Dispatch Identifier)。

(繼承來源 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

擷取物件的類型資訊,可以用來取得介面的類型資訊。

(繼承來源 Attribute)
_Attribute.GetTypeInfoCount(UInt32)

擷取物件提供的類型資訊介面數目 (0 或 1)。

(繼承來源 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

提供物件所公開的屬性和方法的存取權。

(繼承來源 Attribute)

適用於

另請參閱