gpt4 book ai didi

c# - mvc-model 日期范围注释动态日期

转载 作者:太空宇宙 更新时间:2023-11-03 23:41:43 27 4
gpt4 key购买 nike

引用 stackoverflow 中的这个线程

[Range(typeof(DateTime), "1/2/2004", "3/4/2004",
ErrorMessage = "Value for {0} must be between {1} and {2}")]
public DateTime EventOccurDate{get;set;}

我尝试将一些动态日期添加到模型的日期范围验证器中:

private string currdate=DateTime.Now.ToString();
private string futuredate=DateTime.Now.AddMonths(6).ToString();

[Range(typeof(DateTime),currdate,futuredate,
ErrorMessage = "Value for {0} must be between {1} and {2}")]
public DateTime EventOccurDate{get;set;}

但是报错,难道MVC中没有办法设置动态日期范围验证吗?

最佳答案

您不能在属性中使用动态值,因为它们是在编译时生成的元数据。实现此目的的一种可能性是编写自定义验证属性或使用 Fluent Validation这允许使用流畅的表达式来表达更复杂的验证场景。

以下是此类自定义验证属性的示例:

public class MyValidationAttribute: ValidationAttribute
{
public MyValidationAttribute(int monthsSpan)
{
this.MonthsSpan = monthsSpan;
}

public int MonthsSpan { get; private set; }

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null)
{
var date = (DateTime)value;
var now = DateTime.Now;
var futureDate = now.AddMonths(this.MonthsSpan);

if (now <= date && date < futureDate)
{
return null;
}
}

return new ValidationResult(this.FormatErrorMessage(this.ErrorMessage));
}
}

然后用它装饰你的模型:

[MyValidation(6)]
public DateTime EventOccurDate { get; set; }

关于c# - mvc-model 日期范围注释动态日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28826736/

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