2016-06-10 115 views
0

導入「未知」數據時使用以下模式。AbstractValidator:顯示帶屬性值的錯誤消息

public class MyCustomObject 
{ 
    public string MyCustomDateAsString { get; set; } 

    public DateTime? MyCustomDate 
    { 
     get 
     { 
      DateTime? returnValue = null; 
      DateTime parseResult = DateTime.MinValue; 
      bool parseAttempt = DateTime.TryParse(this.MyCustomDateAsString, out parseResult); 
      if (parseAttempt) 
      { 
       returnValue = parseResult; 
      } 
      return returnValue; 
     } 
    } 

    public string MyCustomIntAsString { get; set; } 


    public int? MyCustomInt 
    { 
     get 
     { 
      int? returnValue = null; 
      int parseResult = 0; 
      bool parseAttempt = int.TryParse(this.MyCustomIntAsString, out parseResult); 
      if (parseAttempt) 
      { 
       returnValue = parseResult; 
      } 
      return returnValue; 
     } 
    } 

} 

我有這個工作。

public class MyCustomObjectValidator : AbstractValidator<MyCustomObject> 
{ 
    public MyCustomObjectValidator() 
    { 
     RuleFor(custobj => custobj.MyCustomDateAsString).NotEmpty().WithMessage("Please specify a MyCustomDateAsString"); 
     RuleFor(custobj => custobj.MyCustomIntAsString).NotEmpty().WithMessage("Please specify a MyCustomIntAsString"); 

    } 
} 

我想添加這些規則。

 RuleFor(custobj => custobj.MyCustomDate).NotNull().WithMessage("MyCustomDate must be a valid non null date. You specified '{0}'"); /* How can I put MyCustomDateAsString for the {0} */ 
     RuleFor(custobj => custobj.MyCustomInt).NotNull().WithMessage("MyCustomInt must be a valid non null int. You specified '{0}'"); /* How can I put MyCustomIntAsString for the {0} */ 

但我不知道如何讓MyCustomDateAsString和MyCustomIntAsString在爲MyCustomDate和MyCustomInt錯誤信息顯示出來。

回答

1

因此,對於大多數驗證器,您將使用{PropertyValue}佔位符來獲取當前屬性值,但這不會在這種情況下幫助您獲得不同屬性的值。

但是,有一個WithMessage的重載需要一個func,您可以使用它來構建自定義的placehold值。

RuleFor(x=>x.Foo).NotNull().WithMessage("...blah {0}", x=>x.SomeOtherProperty); 

最後一個參數實際上是Func鍵[T,對象]的參數數組,以便你喜歡你可以指定多達的這些,並且他們在順序處理。