加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – FluentValidation – 验证跨多个属性

发布时间:2020-12-15 18:47:33 所属栏目:asp.Net 来源:网络整理
导读:有一个用户可以输入事件的开始日期/时间和结束日期/时间的表单。到目前为止,这是验证器: public class EventModelValidator : AbstractValidatorEventViewModel { public EventModelValidator() { RuleFor(x = x.StartDate) .NotEmpty().WithMessage("Date
有一个用户可以输入事件的开始日期/时间和结束日期/时间的表单。到目前为止,这是验证器:
public class EventModelValidator : AbstractValidator<EventViewModel>
    {
        public EventModelValidator()
        {
            RuleFor(x => x.StartDate)
                .NotEmpty().WithMessage("Date is required!")
                .Must(BeAValidDate).WithMessage("Invalid date");
            RuleFor(x => x.StartTime)
                .NotEmpty().WithMessage("Start time is required!")
                .Must(BeAValidTime).WithMessage("Invalid Start time");
            RuleFor(x => x.EndTime)
                .NotEmpty().WithMessage("End time is required!")
                .Must(BeAValidTime).WithMessage("Invalid End time");
            RuleFor(x => x.Title).NotEmpty().WithMessage("A title is required!");
        }


        private bool BeAValidDate(string value)
        {
            DateTime date;
            return DateTime.TryParse(value,out date);
        }

        private bool BeAValidTime(string value)
        {
            DateTimeOffset offset;
            return DateTimeOffset.TryParse(value,out offset);
        }

    }

现在我还要添加验证,EndDateTime> StartDateTime(组合日期时间属性),但不知道如何去做。

编辑:
为了澄清,我需要以某种方式结合EndDate EndTime / StartDate StartTime即DateTime.Parse(src.StartDate“”src.StartTime),然后验证EndDateTime与StartDateTime – 我该怎么做?

解决方法

在我重新读取 documentation后,最后让它工作:“请注意,对于”必须“还有一个额外的重载也可以接受正在验证的父对象的一个??实例。
public class EventModelValidator : AbstractValidator<EventViewModel>
    {
        public EventModelValidator()
        {
            RuleFor(x => x.StartDate)
                .NotEmpty().WithMessage("Date is required!")
                .Must(BeAValidDate).WithMessage("Invalid date");
            RuleFor(x => x.StartTime)
                .NotEmpty().WithMessage("Start time is required!")
                .Must(BeAValidTime).WithMessage("Invalid Start time");
            RuleFor(x => x.EndTime)
                .NotEmpty().WithMessage("End time is required!")
                .Must(BeAValidTime).WithMessage("Invalid End time")
                // new
                .Must(BeGreaterThan).WithMessage("End time needs to be greater than start time");
            RuleFor(x => x.Title).NotEmpty().WithMessage("A title is required!");
        }


        private bool BeAValidDate(string value)
        {
            DateTime date;
            return DateTime.TryParse(value,out offset);
        }
        // new
        private bool BeGreaterThan(EventViewModel instance,string endTime)
        {
            DateTime start = DateTime.Parse(instance.StartDate + " " + instance.StartTime);
            DateTime end = DateTime.Parse(instance.EndDate + " " + instance.EndTime);
            return (DateTime.Compare(start,end) <= 0);
        }
    }

这可能是一个更清洁/更有条理的方法,但现在它可以工作。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读