1

如何验证分配给下拉列表元素的值?通常我会在模型中分配范围,并且该字段将被验证。但是,如果我有这样的事情,我不知道如何处理它。

模型

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 的有效范围为 0.01 - .5。Person 可以分配许多产品,因此我与 Person 和 Product 建立了一对多的关系。

有没有办法根据他们选择 X、Y 的产品来验证价值?我将拥有大约 40 种不同的产品,因此理想情况下我可以做到这一点,而不必为每个产品都设置单独的模型。

4

1 回答 1

1

您可以使用自定义业务规则进行验证ValidationAttribute

这非常简单,您只需要执行以下操作:

  1. 创建一个继承ValidationAttribute并覆盖该IsValid方法的类。
  2. 用您刚刚创建的属性装饰您的财产。

例如:

[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; }
   ....
}
于 2013-03-04T20:10:56.380 回答