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 資料欄位的顯示。 電子郵件地址以超連結形式顯示,而非動態資料從內在資料類型推斷出的簡單文字。 範例程式碼分為三個部分,執行以下步驟:

  • 它實作了一個中繼資料部分類別及其相關的中繼資料類別。

  • 在相關的元資料類別中,它會將該屬性套用 DataTypeAttribute 到 EmailAddress 資料欄位,指定 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樣本資料庫,請參閱GitHubMicrosoft SQL Server產品樣本:資料庫。 確保你安裝的是與你所使用的 SQL Server 版本相符的範例資料庫版本。

  • 一個以數據為基礎的網站。 這讓你能為資料庫建立資料上下文,並建立包含資料欄位的類別以便自訂。 如需詳細資訊,請參閱Walkthrough: Creating a New Dynamic Data Web Site using Scaffolding

備註

這個 DataTypeAttribute 屬性讓你可以用比資料庫內在型別更具體的類型來標記欄位。 類型名稱是從 DataType 列舉類型中選擇的。 例如,包含電子郵件地址的字串資料欄位可以指定為 類型 EmailAddress 。 這些資訊接著會被欄位範本存取,以修改資料欄位的處理方式。

你使用這個 DataTypeAttribute 屬性的原因如下:

  • 提供資料欄位的額外類型資訊。 你可以將屬性 DataTypeAttribute 套用到資料模型中的資料欄位,並指定列舉中 DataType 額外的型別名稱來達成。 處理資料欄位的欄位範本可以存取這些額外的元資料類型資訊,以決定如何處理該欄位。 例如,文字欄位範本可以產生內在型態為 String的電子郵件地址的超連結。

  • 將自訂欄位範本與資料欄位關聯。 指定的自訂欄位範本將用於處理資料欄位。 這是使用 UIHintAttribute 屬性的另一種選擇。

當你將屬性套用 DataTypeAttribute 到資料欄位時,必須執行以下操作:

  • 遵守屬性使用規則。

  • 實作包含你想套用該屬性的資料欄位的元資料類別。

  • 適時發出驗證錯誤。

建構函式

名稱 Description
DataTypeAttribute(DataType)

使用指定的類型名稱初始化該類別的新 DataTypeAttribute 實例。

DataTypeAttribute(String)

透過使用指定的欄位範本名稱初始化類別的新實例 DataTypeAttribute

屬性

名稱 Description
CustomDataType

會取得與資料欄位相關聯的自訂欄位範本名稱。

DataType

取得與資料欄位相關的類型。

DisplayFormat

採用資料欄位顯示格式。

ErrorMessage

若驗證失敗,會接收或設定錯誤訊息以關聯驗證控制項。

(繼承來源 ValidationAttribute)
ErrorMessageResourceName

取得或設定錯誤訊息資源名稱,以便在驗證失敗時查詢 ErrorMessageResourceType 屬性值。

(繼承來源 ValidationAttribute)
ErrorMessageResourceType

取得或設定資源類型,以便在驗證失敗時用於錯誤訊息查詢。

(繼承來源 ValidationAttribute)
ErrorMessageString

會收到本地化驗證錯誤訊息。

(繼承來源 ValidationAttribute)
RequiresValidationContext

會得到一個值,表示該屬性是否需要驗證上下文。

(繼承來源 ValidationAttribute)
TypeId

在衍生類別中實作時,取得這個 Attribute的唯一標識碼。

(繼承來源 Attribute)

方法

名稱 Description
Equals(Object)

傳回值,這個值表示這個實例是否等於指定的物件。

(繼承來源 Attribute)
FormatErrorMessage(String)

根據錯誤發生的資料欄位,對錯誤訊息套用格式化。

(繼承來源 ValidationAttribute)
GetDataTypeName()

回傳與資料欄位相關聯的類型名稱。

GetHashCode()

傳回這個實例的哈希碼。

(繼承來源 Attribute)
GetType()

取得目前實例的 Type

(繼承來源 Object)
GetValidationResult(Object, ValidationContext)

檢查指定值是否相較於當前驗證屬性有效。

(繼承來源 ValidationAttribute)
IsDefaultAttribute()

在衍生類別中覆寫時,指出這個實例的值是否為衍生類別的預設值。

(繼承來源 Attribute)
IsValid(Object, ValidationContext)

驗證指定值相對於目前驗證屬性的值。

(繼承來源 ValidationAttribute)
IsValid(Object)

檢查資料欄位的值是否有效。

Match(Object)

在衍生類別中覆寫時,傳回值,指出這個實例是否等於指定的物件。

(繼承來源 Attribute)
MemberwiseClone()

建立目前 Object的淺層複本。

(繼承來源 Object)
ToString()

傳回表示目前 物件的字串。

(繼承來源 Object)
Validate(Object, String)

驗證指定的物件。

(繼承來源 ValidationAttribute)
Validate(Object, ValidationContext)

驗證指定的物件。

(繼承來源 ValidationAttribute)

明確介面實作

名稱 Description
_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)

適用於

另請參閱