【问题标题】:Datatype.Date how to set minimum date to Today?Datatype.Date 如何将最小日期设置为今天?
【发布时间】:2015-03-17 00:30:47
【问题描述】:

我使用 MVC5 DataType.Date 创建了一个日期选择器:

[DataType(DataType.Date)]
public DateTime ArrivalDate { get; set; }

如何将最短可用日期设置为今天并禁用所有过去的日期?

或者,是否有禁用自定义日期范围的选项?

我尝试使用 this answer 创建自定义 DateRangeValidator,但出现以下错误:named parameter type constraints

这是我的日期范围验证器:

public DateTime FirstDate = DateTime.Today.Date;
    //public DateTime SecondDate { get; set; }

    protected override ValidationResult IsValid(DateTime date, ValidationContext validationContext)
    {
        // your validation logic
        if (date >= DbFunctions.TruncateTime(FirstDate))
        {
            return ValidationResult.Success;
        }
        else
        {
            return new ValidationResult("Date is not valid.");
        }
    }

【问题讨论】:

    标签: c# asp.net-mvc date datetime asp.net-mvc-5


    【解决方案1】:

    尝试使用您自己的逻辑构建自定义验证属性:

            public sealed class PresentOrFutureDateAttribute: ValidationAttribute
            {
                protected override ValidationResult IsValid(object value, ValidationContext validationContext)
                {                 
                    // your validation logic
                    if (Convert.ToDateTime(value) >= DateTime.Today)
                    {
                        return ValidationResult.Success;
                    }
                    else
                    {
                        return new ValidationResult("Past date not allowed.");
                    }
                }
            }
    

    【讨论】:

    • 为什么要使用对象来获取价值? Operator '>=' cannot be applied to operands of type 'object' and 'System.DateTime'
    • 这是一个覆盖,所以我们必须遵循父签名。处理对象以将其转换/转换为预期的类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2011-04-22
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多