1. ホーム
  2. c#

[解決済み] データアノテーションを用いた条件付き必須プロパティ

2023-07-13 23:34:39

質問

このようなクラスがあります。

public class Document
{
   public int DocumentType{get;set;}

   [Required]
   public string Name{get;set;}

   [Required]
   public string Name2{get;set;}
}

ここで [Required] データアノテーションを NameName2 プロパティがある場合、すべて問題なく、もし Name または Name2 が空であれば、バリデーションはエラーを投げます。

しかし、私は Name フィールドが必要な場合のみ DocumentType が 1 に等しい場合のみ必要です。 と Name2 の場合のみ必要です。 DocumentType が2に等しい場合のみ必要です。

public class Document
{
   public int DocumentType{get;set;}

   [Required(Expression<Func<object, bool>>)]
   public string Name{get;set;}

   [Required(Expression<Func<object, bool>>)]
   public string Name2{get;set;}
}

が、できないことは分かっています、エラーになります。この要件はどうすればいいのでしょうか?

どのように解決するのですか?

アウトオブザボックスでは、まだ不可能だと思います。

しかし、私はこれを見つけた Mvc.ValidationToolkitに関する有望な記事です。 (また はこちら のように、残念ながら これ はアルファ版しかありませんが、このコードから必要なメソッドを抜き出して独自に統合することも可能でしょう) のように、このコードには良い音色の属性 RequiredIf という属性が含まれており、これはまさにあなたの原因と一致するようです。

  • からプロジェクトをダウンロードし リンクされた zip をダウンロードし、それをビルドします。
  • ビルドフォルダからビルドされたDLLを取得し、使用しているプロジェクトで参照します。
  • 残念ながら、これは MVC への参照も必要なようです (最も簡単な方法は、VS で MVC プロジェクトを開始するか、または install-package Microsoft.AspNet.Mvc )
  • を使いたいファイルに using Mvc.ValidationToolkit;
  • というように書くと [RequiredIf("DocumentType", 2)] あるいは [RequiredIf("DocumentType", 1)] のいずれでもない場合、オブジェクトは有効です。 name または name2 が指定されている限り DocumentType が 1 または 2 でない限り