私は、より高度なバリデーションを行うために、ASP.NET ViewModelからデータ注釈情報を抽出する必要がある状況があります。.NET Frameworkがクラスからデータ注釈情報を抽出するために使用するクラスは何ですか?
私自身のタイプ記述子クラスを書くのではなく、ネイティブのものを使うことができるのだろうかと思います。
Data AnnotationはASP.NET MVCに関連付けられていませんが、ASP.NET MVC固有の実装がある場合は、問題はありません。
アイデア?
私は、より高度なバリデーションを行うために、ASP.NET ViewModelからデータ注釈情報を抽出する必要がある状況があります。.NET Frameworkがクラスからデータ注釈情報を抽出するために使用するクラスは何ですか?
私自身のタイプ記述子クラスを書くのではなく、ネイティブのものを使うことができるのだろうかと思います。
Data Annotationは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
とProgramming C#のChapter 18を参照してください。
私が言ったように、属性を読み取るタイプ記述子クラスを書くことができます。フレームワークの中ですでに焼いた –
私はあなたの努力を感謝しますが、私は私が必要なものを見つけることになりました。私の答えをチェックしてください。 –
名前空間System.ComponentModel.DataAnnotationsには、ValidationAttributesで装飾されたオブジェクトのオブジェクトまたはプロパティを検証するために使用されるクラスValidatorが含まれています。
このクラスは、検証ロジックに依存するフレームワークのほとんどの部分(ASP.NET MVC、WCF RIA Servicesなど)で使用されていると思います。
基本的な検証機能を拡張したい場合は、独自のValidationAttributeを記述し、検証ツールでオブジェクトをチェックさせることができます。
これはすべて反射によって行われます。 – Oded
@Oded。私は知っているが、マイクロソフトはこのロジックをカプセル化するタイプ記述子クラスを実装しているに違いありません。プロパティが必要かどうかを知る必要があるたびに、繰り返し書き直すのは難しいことです。 –