Проверка DateTime с помощью FluentValidator

Это мой класс ViewModel :

public class CreatePersonModel
{
    public string Name { get; set; }
    public DateTime DateBirth { get; set; }
    public string Email { get; set; }
}

CreatePerson.cshtml

@model ViewModels.CreatePersonModel
@{
    ViewBag.Title = "Create Person";
}

<h2>@ViewBag.Title</h2>

@using (Html.BeginForm())
{
    <fieldset>
        <legend>RegisterModel</legend>

        @Html.EditorForModel()

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

CreatePersonValidator.cs

public class CreatePersonValidator : AbstractValidator<CreatePersonModel>
{
    public CreatePersonValidator()
    {
        RuleFor(p => p.Name)
            .NotEmpty().WithMessage("campo obrigatório")
            .Length(5, 30).WithMessage("mínimo de {0} e máximo de {1} caractéres", 5, 30)
            .Must((p, n) => n.Any(c => c == ' ')).WithMessage("deve conter nome e sobrenome");

        RuleFor(p => p.DateBirth)
            .NotEmpty().WithMessage("campo obrigatório")
            .LessThan(p => DateTime.Now).WithMessage("a data deve estar no passado");

        RuleFor(p => p.Email)
            .NotEmpty().WithMessage("campo obrigatório")
            .EmailAddress().WithMessage("email inválido")
            .OnAnyFailure(p => p.Email = "");
    }
}

При попытке создать человека с недопустимый формат даты:

Error trying to save the person

Наблюдения

Как и в моем классе CreatePersonModel, свойство DateBirth является типом DateTime , проверка asp.net MVC прошла за меня.

Но я хочу настроить сообщение об ошибке с помощью FluentValidation .

Я не хочу изменять тип свойства по разным причинам, например:

В классе CreatePersonValidator.cs проверка заключается в том, чтобы проверить, была ли дата в прошлом:

.LessThan (p => DateTime.Now)

Вопрос

Как настроить сообщение об ошибке без использования DataAnnotations (с помощью FluentValidator).

15
задан ridermansb 15 October 2011 в 13:07
поделиться