1

这是我的代码:

RuleFor(x => x.Content).NotEmpty().Must(content => content.Trim().Length > 0);

我希望它应该表现为

if (NotEmpty(x.Content) && x.Content.Trim().Length > 0)

声明,但它抛出NullReferenceExceptionif x.Contentis null

请帮助我解决方法。

4

3 回答 3

2

Unless它允许您根据条件执行规则。但是,您需要将规则分成两部分:

RuleFor(x => x.Content).NotEmpty();
RuleFor(x => x.Content).Must(content => content.Trim().Length > 0).Unless(x => x == null);

或者您可以使用??更紧凑的运算符:

RuleFor(x => (x.Content ?? "").Trim()).NotEmpty();
于 2013-03-15T10:08:41.050 回答
2

看来这段代码也很完美:

RuleFor(x => x.Content)   
    .Cascade(CascadeMode.StopOnFirstFailure)    
        .NotEmpty()   
        .Must(content => content.Trim().Length > 0);
于 2013-03-25T16:15:12.130 回答
1

您可以编写自定义规则。如果规则返回 true,则创建一个ValidationFailure. 像这样的东西:

public class ViewModelValidator : AbstractValidator<ViewModel>
{
    public ViewModelValidator()
    {
        Custom(r => ContentIsEmpty(r) ? new ValidationFailure("Content", "Content must not be empty.") : null);
    }

    private static bool ContentIsEmpty(ViewModel viewModel)
    {
        return string.IsNullOrWhiteSpace(viewModel.Content);
    }
}
于 2013-03-15T10:07:22.633 回答