我有一个有两个标志的实体,每个标志都有一个值。为了便于说明,我们将使用以下代码:
public partial class ExampleEntity
{
public bool OptionA { get; set; }
public int OptionAValue { get;set; }
public bool OptionB { get; set; }
public int OptionBValue { get;set; }
}
在使用的Webform上,如果未选中任何选项,则需要抛出一个标志。 如果选中了一个选项,则只需要/填充/评估相应的值。
现在我知道我可以使用[Required]标签和其他相关标签([Range(1,100)]),但我不确定如何对它们进行分组(如果可能)或在哪里添加逻辑根据输入的值确定是否需要A或B的值。
答案 0 :(得分:0)
正如Pawel所说,您可以实现IValidatableObject接口(示例here
根据您的具体情况,您可以这样做:
public partial class ExampleEntity : IValidatableObject
{
public bool OptionA { get; set; }
public int OptionAValue { get;set; }
public bool OptionB { get; set; }
public int OptionBValue { get;set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (OptionA)
{
var aIsValid = PerformAValidation();
if (!aIsValid)
{
yield return new ValidationResult("A was not valid", new[] {"OptionAValue", OptionAValue});
}
}
if (OptionB)
{
var bIsValid = PerformBValidation();
if (!bIsValid)
{
yield return new ValidationResult("B was not valid", new[] {"OptionBValue", OptionBValue});
}
}
}
private bool PerformAValidation()
{
if (OptionAValue < 100)
{
return false;
}
return true;
}
private bool PerformBValidation()
{
if (OptionBValue > 100)
{
return false;
}
return true;
}
}
使用这些验证规则,OptionAValue需要小于100,OptionBValue需要大于100.