gpt4 book ai didi

c# - 何时和必须的 FluentValidation?

转载 作者:可可西里 更新时间:2023-11-01 08:35:03 25 4
gpt4 key购买 nike

当下拉列表值为 yes 且字段必须为日期时,我正在尝试使用 FluentValidation 验证。它在下拉列表为 yes 检查 date 时工作。但当我选择 No 时也显示验证,它仍然显示 Must be date

如果下拉列表值不是 yes,则不再验证。我们怎样才能做到这一点?

 RuleFor(x => x.DtPublishedTimeText)
.NotEmpty()
.When(HasMaterialPublishedElseWhereText)
.WithMessage("Required Field")
.Must(BeAValidDate)
.WithMessage("Must be date");

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

private bool HasMaterialPublishedElseWhereText(MeetingAbstract model)
{
return model.HasMaterialPublishedElseWhereText != null &&
model.HasMaterialPublishedElseWhereText.Equals("yes");
}

最佳答案

您遇到的问题是 When 谓词仅适用于一个规则。您需要对 NotEmptyMust 进行条件验证。

有两种方法可以实现这一点。当只有几个条件规则时,选项 1 更整洁,否则我会使用选项 2。

RuleFor(x => x.DtPublishedTimeText)
.NotEmpty()
.When(HasMaterialPublishedElseWhereText)
.WithMessage("Required Field")
.Must(BeAValidDate)
.When(HasMaterialPublishedElseWhereText)
.WithMessage("Must be date");

或者

When(HasMaterialPublishedElseWhereText, () => {
RuleFor(x => x.DtPublishedTimeText)
.NotEmpty()
.WithMessage("Required Field");
RuleFor(x => x.DtPublishedTimeText)
.Must(BeAValidDate)
.WithMessage("Must be date");
});

请注意:我不知道 HasMaterialPublishedElseWhereText 是什么或它看起来像什么。我假设您可以将它用作谓词


编辑:

我还会考虑重构 HasMaterialPublishedElseWhereText 方法,下面的方法不太容易出错。

private bool HasMaterialPublishedElseWhereText(MeetingAbstract model)
{
return String.Equals(model.HasMaterialPublishedElseWhereText, "yes", StringComparison.InvariantCultureIgnoreCase);
}

关于c# - 何时和必须的 FluentValidation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24024896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com