gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:37:51 25 4
gpt4 key购买 nike

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

    [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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com