2012-02-08 72 views
1

我有一種情況需要從ASP.NET ViewModel中提取數據註釋信息以執行一些更高級的驗證。.NET Framework用於從類中提取數據註釋信息的類是什麼?

不用編寫我自己的類型描述符類,我想知道我是否可以使用本機描述符類。

即使數據註釋不綁定到ASP.NET MVC,如果有一些ASP.NET MVC的具體實現,那對我來說不會有問題。

任何想法?

+1

這一切都是通過反思完成的。 – Oded 2012-02-08 12:37:29

+0

@已結束。我知道,但微軟必須實現一個類型描述符類封裝這個邏輯。每次你需要知道一個屬性是否是必需的時候,重新編寫它是不切實際的 – 2012-02-08 12:39:14

回答

0

正如我懷疑的那樣,ASP.NET MVC確實創建了一個名爲ModelMetadata的類的幫助器,以便從模型中提取元信息,並考慮數據註釋屬性。請參閱示例:

 [HttpPost] 
     public ActionResult Create(AppointmentViewModel formModel) 
     { 
      var metaInfo = ModelMetadata.FromLambdaExpression<AppointmentViewModel, DateTime>(model => model.Date, null); 
      var dateIsRequired = metaInfo.IsRequired; 

      // do some logic here.. 

      return this.Edit(formModel); 
     } 

這樣可以減少手動讀取基本方案的數據註釋屬性的需求。

2

數據註釋只是普通的屬性,可以使用屬性的正常反射機制來訪問。

請參閱MSDN上的Accessing Custom Attributes和編程C#的Chapter 18

+0

正如我所說,我知道我可以編寫一個類型描述符類來讀取屬性..我問是否有一些已經在框架內烘烤 – 2012-02-08 12:40:30

+0

我很欣賞你的努力,但我最終找到了我需要的東西。檢查我的答案。 – 2012-02-08 13:08:03

1

命名空間System.ComponentModel.DataAnnotations包含類Validator,該類用於驗證用ValidationAttributes裝飾的對象的對象或屬性。

我覺得這個類被大多數部分(ASP.NET MVC,WCF RIA Services等)所依賴的驗證邏輯框架所使用。

如果您想擴展基本的驗證功能,您可以編寫自己的ValidationAttribute s並讓Validator檢查您的對象。

相關問題