如何添加日期时间验证范围

Mar*_*ein 4 c# datetime asp.net-core blazor-server-side

我的 blazor 服务器端组件有一个简单的输入模型。我想对 DateTime 属性使用内置验证。

[Required]
public DateTime Date { get; set; }
Run Code Online (Sandbox Code Playgroud)

我如何才能只接受 DateTime 值 >= DateTime.Now?

Vi1*_*100 8

您必须创建自定义验证属性。但要做好,不要像上面的答案所示......

using System;
using System.ComponentModel.DataAnnotations;

namespace YourAppNamespace
{
    public class FromNowAttribute : ValidationAttribute
    {
        public FromNowAttribute() {}

        public string GetErrorMessage() => "Date must be past now";

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var date = (DateTime)value;

            if (DateTime.Compare(date, DateTime.Now) < 0) return new ValidationResult(GetErrorMessage());
            else return ValidationResult.Success;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后这样使用它:

[Required]
[FromNow]
public DateTime Date { get; set; }
Run Code Online (Sandbox Code Playgroud)