如何验证分配给下拉列表元素的值?通常我会在模型中分配范围,并且该字段将被验证。但是,如果我有这样的东西,我不知道如何处理它。
模型
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Value { get; set; }
public DateTime Given { get; set; }
public TimeSpan TimeGiven { get; set; }
public string Phase { get; set; }
public bool Active { get; set; }
public int PersonId { get; set; }
}
模型中的名称是不同产品的下拉列表。我不确定如何处理Value的验证,因为不同的产品将具有不同的范围。例如,产品名称X的有效范围为25-30,其中产品Y的有效范围为.01 - .5。人员可以分配许多产品,因此我与人员和产品建立了一对多的关系。
有没有办法根据他们选择X,Y的产品来验证价值?我将有大约40种不同的产品,所以理想情况下,我可以做到这一点,而无需为每种产品单独设计模型。
答案 0 :(得分:1)
您可以使用ValidationAttribute
您只需要执行以下操作即可:
ValidationAttribute
的类并覆盖IsValid
方法。 例如:
[AttributeUsage(AttributeTargets.Property, AllowMultiple =false, Inherited = false)]
public class MyBusinessRuleValidation: ValidationAttribute
{
protected override ValidationResult IsValid(object v, ValidationContext validationContext)
{
var Name = (string)v //since we decorated the property Name with this attribute;
//retrieve Value's value using validationContext
var value = (decimal) validationContext.ObjectType.GetProperty("Value").GetValue(validationContext.ObjectInstance, null);
//check whether you need to exit with error
if( name == ProductX) {
if(value > 10 && value < 25)
return new ValidationResult(ErrorMessage);
}
return ValidationResult.Success;
}
}
使用验证器:
public class Product
{
public int Id { get; set; }
[MyBusinessRuleValidation(ErrorMessage="Some ugly error")]
public string Name { get; set; }
....
}