Так что я использую Fluent Validation на форме. Когда я нажимаю кнопку «Отправить» и ничего не вводит, я получаю ошибку проверки даты рождения. Если я вхожу в DoB, я получаю подтверждение для First Name.Fluent Validation не проверяет всю форму в первый раз
Почему это происходит? Я не могу понять, что я сделал неправильно.
Моя форма:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(customer => customer.CustomerIncomeInfo.CustomerEmploymentInfoModel.EmployerModel.Id)
<!-- basic customer info -->
<fieldset>
<legend>Customer Info</legend>
@Html.ValidationSummary(false, "Please correct the errors and try again", new { @class = "text-danger" })
<div class="row">
<div class="col-md-6">
<dl class="dl-horizontal">
<dt>@Html.LabelFor(model => model.FirstName)</dt>
<dd>@Html.EditorFor(model => model.FirstName, new {@class = "form-control"})</dd>
</dl>
</div>
<div class="col-md-6">
<dl class="dl-horizontal">
<dt>@Html.LabelFor(model => model.DateOfBirth)</dt>
<dd>@Html.EditorFor(model => model.DateOfBirth, new {@class = "form-control"})</dd>
</dl>
</div>
</div>
</fieldset>
}
Мой свободный Код подтверждения:
public CustomerValidator()
{
RuleFor(customer => customer.FirstName)
.Length(3, 50)
.NotEmpty()
.WithMessage("Please enter a valid first name");
RuleFor(customer => customer.DateOfBirth).NotEmpty().WithMessage("Please enter a valid date of birth");
}
Моя модель:
public class CustomerModel
{
public CustomerModel()
{
}
public Guid Id { get; set; }
[DisplayName("First Name")]
public string FirstName { get; set; }
[DisplayName("D.O.B.")]
public DateTime DateOfBirth { get; set; }
}
Регистрация валидатор с Autofac:
builder.RegisterType<CustomerValidator>()
.Keyed<IValidator>(typeof(IValidator<CustomerModel>))
.As<IValidator>();
Не могли бы вы опубликовать код, в котором вы выполняете операцию Validate, чтобы увидеть, как вы возвращаете ошибки в представлении? – Javier
Когда у вас есть пустой DoB, вы получаете сообщение «Пожалуйста, введите действительную дату рождения» или другую? Я бы предположил, что в этом случае вы даже не проверите проверку FluentValidation (потому что есть также проверка правильности типа данных в mvc: и вы пытаетесь передать нулевое значение в значение с нулевым значением DateTime. То же самое, если вы пишете «a» в текстовое поле, связанное с типом int) –
Raphaël Althaus, вы в порядке! Приведение значения null в значение DoB исправило мою проблему! Если вы можете опубликовать фактический ответ (и желательно с некоторыми деталями для порядка проверки), то щедрость будет вашей :) – RJP