3

本日(2010年1月15日)スコットはASP.NETMVC2モデルの検証についてブログを書きました

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

誰かが実行時にプログラムで検証ルールを追加する方法を知っている人はいますか?

「プログラム登録」は、ValidationAspectsでサポートされている同様の機能です。

// register lambda syntax validation functions
typeof(User).GetProperty("Name").AddValidation<string>((name, context) => 
  { if (!Exists(name)) { throw new ValidationException("Username is unknown"); } } );

// register validation factories (classes)
typeof(User).GetProperty("Name").AddValidation(new [] { new NotNullOrEmpty()} );

// don't like strings?
TypeOf<User>.Property(user => user.Name).AddValidation(new [] { new NotNullOrEmpty()} );
4

2 に答える 2

1

カスタムメタデータを提供するには、抽象クラスModelMetadataProviderを実装し、それをglobal.asax内に登録する必要があります。

           ModelMetadataProviders.Current = new ConventionMetadataProvider();

これは、実行時に検証属性を追加するものではありません。すべての検証情報をModelMetadataクラスに提供するだけで、HTML.EditorForビットによって読み取られます。

于 2010-01-16T23:47:01.493 に答える
0

属性は、実行時ではなく、コンパイル時に作成されます。コンパイル後に変更することはできません。

ただし、実行時の検証オプションはいくつかあります。私のお気に入りはFluentValidationです。実行時に実行される検証クラスを作成します。ただし、多かれ少なかれ静的データとモデルからのデータのみに制限されます。

于 2012-05-04T17:25:48.673 に答える