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 資料欄位的顯示。 電子郵件地址以超連結形式顯示,而非動態資料從內在資料類型推斷出的簡單文字。 範例程式碼分為三個部分,執行以下步驟:
它實作了一個中繼資料部分類別及其相關的中繼資料類別。
在相關的元資料類別中,它會將該屬性套用 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) |