2017-09-18 18 views
0

リスト内の項目の妥当性を検証する方法を見つけようとしています。私は偉大な図書館である流暢な検証に着きましたが、個々の項目ごとに検証を行う方法を見つけることができないようです。私はこの類似のスレッド(Validate 2 list using fluent validation)からかすかなアイデアを得ましたが、どのようにしてそれをどのようにしたいのかは分かりません。Fluent Validation、Asp.NET Coreのリスト内の各項目のバリデーション

だから私は、このビューモデルを持っている:

public class EditPersonalInfoViewModel 
{ 
    public IList<Property> UserPropertyList { get; set; } 
} 

これは、Active Directoryのプロパティのリストが含まれています。それぞれがこのクラスによって表される:

public class Property 
{ 
    public string Name { get; set; } 
    public UserProperties Value { get; set; } 
    public string input { get; set; } 
    public bool Unmodifiable { get; set; } 
    public string Type { get; set; } 
} 

点は、私はこのようないくつかの方法で、リスト内の各プロパティの異なるルールを指定するように、各ADプロパティは異なる制約を持っている、ということである:

public class ADPropertiesValidator : AbstractValidator<EditPersonalInfoViewModel> 
{ 
    public ADPropertiesValidator() 
    { 
     RuleFor(p => p.UserPropetyList).Must((p,n) => 
     { 
       for (int i = 0; i < n.Count; i++) 
        { 
        if ((n[i].Name.Equals("sAMAccountName")) 
         { 
          RuleFor(n.input).NotEmpty().... 
         } 
        else if(...) 
         { 
         //More Rules 
         } 
        } 
     ) 

    } 
} 

任意のアイデアにこれにアプローチする方法?前もって感謝します。

答えて

1

不適切な観点から検証に近づいています。代わりにあなたのコレクションのコンテナクラスの内部で検証条件を作成するのではなく、ちょうどあなたのPropertyクラスに固有の別のバリデータを作成し、使用することをお使いのADPropertiesValidator内側:

public class ADPropertyValidator : AbstractValidator<Property> 
{ 
    public ADPropertyValidator() 
    { 
     When(p => p.Name.Equals("sAMAccountName"),() => 
     { 
      RuleFor(p => p.input) 
       .NotEmpty() 
       .MyOtherValidationRule(); 
     }); 

     When(p => p.Name.Equals("anotherName"),() => 
     { 
      RuleFor(p => p.input) 
       .NotEmpty() 
       .HereItIsAnotherValidationRule(); 
     }); 
    } 
} 

public class ADPropertiesValidator : AbstractValidator<EditPersonalInfoViewModel> 
{ 
    public ADPropertiesValidator() 
    { 
     RuleForEach(vm => vm.UserPropertyList) 
      .SetValidator(new ADPropertyValidator()); 
    } 
} 
+0

ああ!私は別のポストで同様のものを見たが、うまくいかないと思った。とにかくこれは完全に動作します!ありがとう! – Enixf

関連する問題