代码之家  ›  专栏  ›  技术社区  ›  Ian Nelson

ASP.NET MVC 2中的动态范围验证

  •  12
  • Ian Nelson  · 技术社区  · 14 年前

    我正在使用ASP.NET MVC2,并尝试使用system.componentModel.dataAnnotations命名空间中的属性验证视图模型。

    如何动态设置rangeattribute的允许有效范围? 例如,如果我想验证输入的日期是否在预期范围内。

    这不编译:

    [Range(typeof(DateTime), 
            DateTime.Today.ToShortDateString(), 
            DateTime.Today.AddYears(1).ToShortDateString())]
        public DateTime DeliveryDate { get; set; }
    

    因为“属性参数必须是属性参数类型的常量表达式、type of表达式或数组创建表达式”。

    我需要使用创建自己的自定义验证器吗?

    2 回复  |  直到 14 年前
        1
  •  15
  •   Ian Nelson    14 年前

    好的,找到答案了。.NET Framework 4提供了一个新的CustomValidationAttribute,使以下各项成为可能:

    [Required]
    [DisplayName("Ideal Delivery Date")]
    [CustomValidation(typeof(HeaderViewModel), "ValidateDeliveryDate")]
    public DateTime DeliveryDate { get; set; }
    
    public static ValidationResult ValidateDeliveryDate(DateTime deliveryDateToValidate)
    {
        if (deliveryDateToValidate.Date < DateTime.Today)
        {
        return new ValidationResult("Delivery Date cannot be in the past.");
        }
    
        if (deliveryDateToValidate.Date > DateTime.Today.AddYears(1))
        {
        return new ValidationResult("Delivery Date must be within the next year.");
        }
    
        return ValidationResult.Success;
    }
    

    http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.customvalidationattribute%28VS.100%29.aspx

        2
  •  0
  •   Mattias Jakobsson    14 年前

    您需要创建自己的属性或使用基于无属性的验证框架。正如消息所说,任何属性的所有参数都必须是常量值。