Mar*_*rry 5 c# fluentvalidation asp.net-core
嗨,我允许客户制作要显示的事件,这些日期有ToDate和FromDate,我需要检查ToDate是在未来还是与FromDate;相同。我使用了这个流畅的验证。
public class EventDateValidator : AbstractValidator<Event>
{
public EventDateValidator()
{
RuleFor(evd => evd.FromDate)
.NotEmpty().WithMessage("*Required");
RuleFor(evd => evd.ToDate)
.NotEmpty().WithMessage("*Required")
.GreaterThanOrEqualTo(r => r.FromDate)
.WithMessage("Date To must be after Date From");
}
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是当创建表单加载时会抛出一个空引用错误:
处理请求时发生未处理的异常。NullReferenceException:未将对象引用设置为对象的实例。FluentValidation.AspNetCore.MinLengthClientValidator.AddValidation(ClientModelValidationContext context) in MinLengthClientValidator.cs,第 22 行
GreaterThan 工作得很好,但是如果它的一天事件验证失败。
这是我第一次使用fluent,所以我的知识非常有限。我实际上是用这个问题来让我开始的。
请更新您的原始问题和MinLengthClientValidator.cs来源Event.cs,可能存在问题 - 我将据此编辑最终答案。请参阅下面的实现,可以很好地配合您的输入。
using FluentValidation;
using FluentValidation.Results;
using Shouldly;
namespace StackOverflowQandA
{
public class FluentValidationTests
{
private readonly EventDateValidator validator = new EventDateValidator();
[Fact]
public void ToGreaterThanFrom()
{
ValidationResult result = validator.Validate(new Event
{
FromDate = new DateTime(2023, 1, 1),
ToDate = new DateTime(2023, 1, 15)
});
result.IsValid.ShouldBeTrue();
}
[Fact]
public void ToLessThanFrom()
{
ValidationResult result = validator.Validate(new Event
{
FromDate = new DateTime(2023, 1, 25),
ToDate = new DateTime(2023, 1, 15)
});
result.IsValid.ShouldBeFalse();
}
[Fact]
public void FromToSame()
{
ValidationResult result = validator.Validate(new Event
{
FromDate = new DateTime(2023, 1, 15),
ToDate = new DateTime(2023, 1, 15)
});
result.IsValid.ShouldBeTrue();
}
[Fact]
public void ToIsNull()
{
ValidationResult result = validator.Validate(new Event
{
FromDate = new DateTime(2023, 1, 15),
ToDate = null
});
result.IsValid.ShouldBeFalse();
}
[Fact]
public void FromIsNull()
{
ValidationResult result = validator.Validate(new Event
{
FromDate = null,
ToDate = new DateTime(2023, 1, 15)
});
result.IsValid.ShouldBeFalse();
}
}
public class Event
{
public DateTime? FromDate { get; set; }
public DateTime? ToDate { get; set; }
}
public class EventDateValidator : AbstractValidator<Event>
{
public EventDateValidator()
{
RuleFor(evd => evd.FromDate)
.NotEmpty().WithMessage("*Required");
RuleFor(evd => evd.ToDate)
.NotEmpty().WithMessage("*Required")
.GreaterThanOrEqualTo(r => r.FromDate).WithMessage("Date To must be after Date From");
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7074 次 |
| 最近记录: |