asp.net-mvc-3 - MVC 模型范围验证器?

标签 asp.net-mvc-3 validation date-range code-first

我想要验证日期时间,我的代码是:

    [Range(typeof(DateTime), 
     DateTime.Now.AddYears(-65).ToShortDateString(), 
     DateTime.Now.AddYears(-18).ToShortDateString(),
     ErrorMessage = "Value for {0} must be between {1} and {2}")]
    public DateTime Birthday { get; set; }

但我收到错误:

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

请帮帮我?

最佳答案

这意味着 Range 属性的值无法在以后确定,必须在编译时确定。 DateTime.Now 不是常量,它会根据代码运行时间而变化。

您想要的是自定义 DataAnnotation 验证器。以下是如何构建一个示例:

How to create Custom Data Annotation Validators

将日期验证逻辑放入 IsValid()

这是一个实现。我还使用 DateTime.Subtract() 而不是负年份。

public class DateRangeAttribute : ValidationAttribute
{
    public int FirstDateYears { get; set; }
    public int SecondDateYears { get; set; }

    public DateRangeAttribute()
    {
        FirstDateYears = 65;
        SecondDateYears = 18;
    }

    public override bool IsValid(object value)
    {
        DateTime date = DateTime.Parse(value); // assuming it's in a parsable string format

        if (date >= DateTime.Now.AddYears(-FirstDateYears)) && date <= DateTime.Now.AddYears(-SecondDateYears)))
        {
            return true;
        }

        return false;
}

}

用法是:

[DateRange(ErrorMessage = "Must be between 18 and 65 years ago")]
public DateTime Birthday { get; set; }

它也是通用的,因此您可以指定新的年份范围值。

[DateRange(FirstDateYears = 20, SecondDateYears = 10, ErrorMessage = "Must be between 10 and 20 years ago")]
public DateTime Birthday { get; set; }

关于asp.net-mvc-3 - MVC 模型范围验证器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9733068/

相关文章:

asp.net-mvc - RenderPartial 如何确定在哪里可以找到 View ?

asp.net-mvc-3 - 通过 ASP.NET 同步上下文安全地执行任务,无需 AsyncManager.Sync

javascript - 引导验证在表单提交时不起作用

python - 合并 Spark 数据框中的日期范围

sql - 在可安排培训师的定义空间内查找连续日期

asp.net-mvc - Ninject.Extensions.Logging.nlog2 - 如何?

c# - ASP.NET MVC 3 - microsoft-web-helpers v1.1 的问题

c# - 仅当使用 MVC 选中复选框时才验证文本框

javascript - 以编程方式将 w3c css/html 验证器与自定义 html 结合使用

python - 如何补偿假期 - pandas