我有一種情況需要從ASP.NET ViewModel中提取數據註釋信息以執行一些更高級的驗證。.NET Framework用於從類中提取數據註釋信息的類是什麼?
不用編寫我自己的類型描述符類,我想知道我是否可以使用本機描述符類。
即使數據註釋不綁定到ASP.NET MVC,如果有一些ASP.NET MVC的具體實現,那對我來說不會有問題。
任何想法?
我有一種情況需要從ASP.NET ViewModel中提取數據註釋信息以執行一些更高級的驗證。.NET Framework用於從類中提取數據註釋信息的類是什麼?
不用編寫我自己的類型描述符類,我想知道我是否可以使用本機描述符類。
即使數據註釋不綁定到ASP.NET MVC,如果有一些ASP.NET MVC的具體實現,那對我來說不會有問題。
任何想法?
正如我懷疑的那樣,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);
}
這樣可以減少手動讀取基本方案的數據註釋屬性的需求。
數據註釋只是普通的屬性,可以使用屬性的正常反射機制來訪問。
請參閱MSDN上的Accessing Custom Attributes
和編程C#的Chapter 18。
正如我所說,我知道我可以編寫一個類型描述符類來讀取屬性..我問是否有一些已經在框架內烘烤 – 2012-02-08 12:40:30
我很欣賞你的努力,但我最終找到了我需要的東西。檢查我的答案。 – 2012-02-08 13:08:03
命名空間System.ComponentModel.DataAnnotations包含類Validator,該類用於驗證用ValidationAttributes裝飾的對象的對象或屬性。
我覺得這個類被大多數部分(ASP.NET MVC,WCF RIA Services等)所依賴的驗證邏輯框架所使用。
如果您想擴展基本的驗證功能,您可以編寫自己的ValidationAttribute s並讓Validator檢查您的對象。
這一切都是通過反思完成的。 – Oded 2012-02-08 12:37:29
@已結束。我知道,但微軟必須實現一個類型描述符類封裝這個邏輯。每次你需要知道一個屬性是否是必需的時候,重新編寫它是不切實際的 – 2012-02-08 12:39:14