1

MSDN 記事の 1 つで (以下) のようなものを見たことがあることを神に誓いますが、このプロパティ属性のドキュメントはどこにも見つかりません。

public class MyViewModel{
   [Required]
  public bool Important {get;set;}

 [ValidationDependsOn("Important")]
  public bool HasVIPAccess {get;set;}

}

上記のコード (おそらく悪い例) を見ると、HasVIPAccess プロパティの検証が Important というプロパティの検証に依存するように、2 つのプロパティ間の関係を確立しようとしています。

4

3 に答える 3

3

そのようなことを行う組み込みの検証属性は[Compare("OtherProperty")]、この属性を置くプロパティが等しくなければならないことを意味しますOtherProperty

public class MyViewModel{
   [Required]
  public bool Important {get;set;}

 [Compare("Important")]
  public bool HasVIPAccess {get;set;}

}

注:MVC 3+が必要です

他の検証属性が必要な場合は、Mvc.ValidationTookitを確認できます


その背後にある科学を理解したい場合

これは mvc3 の新機能であり、mvc3 ではこのようにカスタム属性をかなり簡単に実装できます。

IsValid は、モデルのタイプやそれに関連付けられたメタデータなど、実行されている検証に関する情報を含む ValidationContext パラメーターを受け取るようになったため、リフレクションを使用して他のプロパティとその値を取得できます CompareAttribute はこの機能を利用しました

于 2012-04-04T16:18:07.313 に答える
1

FluentValidation.NET

于 2012-04-04T19:28:08.613 に答える
0

これは、カスタム検証属性を作成することで実行できます (これにより、サーバー側の検証のみが有効になります)。関連する投稿は、MVC での新しいデータ注釈検証属性の作成です。

ただし...クライアント側の目立たない検証も機能させたい場合は、JavaScriptの作業を行う必要があります...ここでは、目立たないクライアント側の検証の作成について説明する別の投稿があります... MVC 3による控えめなクライアント検証

于 2012-04-04T19:26:34.330 に答える