[英]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()));
經過一些研究和建議,我找到了一個總體策略。 你可以自由使用外部包嗎?
是
創建一個只讀屬性IsGroupRequired
類的
public Boolean IsGroupRequired { get { return GroupItem1.HasValue == GroupItem2.HasValue && GroupItem2.HasValue == GroupItem3.HasValue && GroupItemNminus1.HasValue == GroupItemN.HasValue; } }
為GroupItem1..N
組的每個屬性分配[RequiredIfTrue("IsGroupRequired")]
沒有
IValidatableObject
接口 編寫自己的驗證方法
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.