簡體   English   中英

使用數據注釋對屬性子集進行強制驗證

[英]Mandatory validation for a subset of properties using data annotation

我有一個包含三個字段的DTO模型。

[Range(1, 100000)]
public Decimal? BonusRate { get; set; }
[Range(1, 100000)]
public Decimal? BonusGain { get; set; }
[Range(1, 100)]
public Decimal? BonusPercentage { get; set; }

在我的情 我做出了一個決定並且運作良好,但看起來有點笨拙。

IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
    if (BonusRate.HasValue || BonusGain.HasValue || BonusPercentage.HasValue)
        if (!BonusRate.HasValue || !BonusGain.HasValue || !BonusPercentage.HasValue)
             yield return new ValidationResult("message");

}

有人知道更好的方法嗎?

if (BonusRate.HasValue == BonusGain.HasValue && BonusGain.HasValue == BonusPercentage.HasValue)

或收集列表中的值並:

var isChecked = list.All(x => (x == list.First()));

經過一些研究和建議,我找到了一個總體策略。 你可以自由使用外部包嗎?

  1. 為解決方案添加萬無一失的
  2. 創建一個只讀屬性IsGroupRequired類的

     public Boolean IsGroupRequired { get { return GroupItem1.HasValue == GroupItem2.HasValue && GroupItem2.HasValue == GroupItem3.HasValue && GroupItemNminus1.HasValue == GroupItemN.HasValue; } } 
  3. GroupItem1..N組的每個屬性分配[RequiredIfTrue("IsGroupRequired")]

沒有

  1. 為您的模型實現IValidatableObject接口
  2. 編寫自己的驗證方法

     IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext) { if (GroupItem1.HasValue == GroupItem2.HasValue && GroupItem2.HasValue == GroupItem3.HasValue && GroupItemN.HasValue == GroupItemN+1.HasValue) yield return new ValidationResult("Your message goes here"); } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM