2017-07-18 26 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。如果是這樣,它的工作 –

相關問題