2017-07-18 27 views
0

我们为calss属性创建自定义属性“SpecificDateAttribute”。我们如何强制所有具有此属性属性的DTO,验证ICustomValidate方法?将自定义验证机制添加到abpBoilerplate dtos?

+0

结账以下网址 https://aspnetboilerplate.com/Pages/Documents/Validating-Data-Transfer-Objects#DocCustomValidation https://forum.aspnetboilerplate.com/viewtopic.php?f=2&t=2819 –

+0

@AlperEbicoglu。是的,我们可以实现接口ICustomValidate,但我应该分别为每个Dtos实现它吗?我可以为所有Dtos实施一次吗? –

+0

我想你为什么需要。请发帖一些代码 –

回答

0

我创建这样的DTO的基类:

public class AzmaBaseDto: ICustomValidate 
{ 
    public virtual void AddAzmValidationErrors(CustomValidationContext context) 
    { 

    } 

    public void AddValidationErrors(CustomValidationContext context) 
    { 
     var properties = this.GetType() 
      .GetProperties(); 

     foreach (var a in properties.Where(p => p.IsDefined(typeof(ShamsiDateAttribute), false))) 
     { 
      #region 
      var v = a.GetValue(this); 
      if (v == null || DateTimeConvert.IsValidShamsiDate(v.ToString()) == false) 
      { 
       string _name = a.Name; 
       if (a.IsDefined(typeof(DisplayAttribute), false)) 
       { 
        var ca = (DisplayAttribute)a.GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault(); 
        if (ca.Name.IsNullOrEmpty() == false) 
         _name = ca.Name; 
       } 
       context.Results.Add(new ValidationResult("Property value [" + _name + "] is not valid")); 
      } 
      #endregion 
     } 

        AddAzmValidationErrors(context); 
    } 
} 

和继承的DTO形成了。像这样

public class UpsertAccountingDocumentInput : AzmaBaseDto 
{ 

    [ShamsiDate] 
    public string Date { get; set; } 



    public bool? SaveAsMemo { get; set; } 



    public override void AddAzmValidationErrors(CustomValidationContext context) 
    { 
     if(SaveAsMemo==false && Date.IsNullOrEmpty()==false) 
     { 
      context.Results.Add(new ValidationResult("Put some error info")); 
     } 

     base.AddAzmValidationErrors(context); 
    } 
} 

我认为这可以是正确答案之一。

+0

我认为它的工作原理。 我的疑问是关于你如何做你的问题:现在你回答我的低调是你想确保所有派生的DTO运行你的基本AddValidationErrors,并且他们调用你的特定的AddAzmValidationErrors。如果是这样,它的工作 –

相关问题