我对这个代码有一个问题:
RuleFor(field => field.TermEndDate)
.NotEmpty()
.When(x => x.TermEndDate == x.TermStartDate)
.WithMessage("error...");我设置了TermEndDate = DateTime.Now,但没有消息引发!
我的测试代码是:
var now = DateTime.Now;
var command = new AddTermCommand
{
SchoolId = Guid.NewGuid(),
TermStartDate = now,
TermEndDate = now
};
var cmd = command.Validate();
if (!cmd.IsValid)
Console.WriteLine(cmd.Errors.First().ErrorMessage);发布于 2015-12-31 12:32:22
您的代码有两个问题:
正如我在注释中所指出的,第一个问题是,您无法与DateTime.Now进行真正的比较,因为在一段时间后(即使非常小)调用DateTime.Now会给出一个不同的值。
第二个问题是您使用的是When方法。When方法首先用于指定运行验证的条件(例如,您可以指定只在其他属性值为1的情况下才验证此属性),它不能用于指定验证规则。相反,您可以使用这样的Must方法:
RuleFor(field => field.TermEndDate)
.NotEmpty()
.Must(x => (DateTime.Now - x).Duration() > TimeSpan.FromMinutes(1))
.WithMessage("error...");在这里,我使用Must来表示,TermEndDate的值应该比运行验证(即调用Validate时)至少多或少1分钟(距DateTime.Now1分钟)。
更新:
要将TermEndDate与TermStartDate进行比较,可以这样做:
RuleFor(field => field.TermEndDate)
.Must((cmd, enddate) => enddate != cmd.TermStartDate)
.WithMessage("error...");发布于 2015-12-31 12:14:03
您的规则不会触发,因为TermEndDate将永远不会与DateTime.Now相等;您正在将过去的值与移动的Now值进行比较。
要么试着根据某一特定日期进行验证,要么仅仅针对某一天:
RuleFor(field => field.TermEndDate)
.NotEmpty()
.When(x => x.TermEndDate.Date == DateTime.Today)
.WithMessage("error...");https://stackoverflow.com/questions/34546304
复制相似问题