J'utilise donc Fluent Validation sur un formulaire. Lorsque je clique sur Envoyer et que je n'ai rien entré, j'obtiens une erreur de validation pour Date de naissance. Si je saisis un DoB, j'obtiens la validation pour Prénom.Fluent Validation ne valide pas la totalité du formulaire la première fois
Pourquoi cela se produit-il? Je ne peux pas comprendre ce que j'ai mal câblé.
Ma forme:
@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>
}
Mon Courant Code de validation:
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");
}
Mon modèle:
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; }
}
Enregistrement du validateur avec Autofac:
builder.RegisterType<CustomerValidator>()
.Keyed<IValidator>(typeof(IValidator<CustomerModel>))
.As<IValidator>();
Pouvez-vous poster le code où vous effectuez l'opération de validation pour voir comment vous retournez les erreurs à la vue? – Javier
Lorsque vous avez un DoB vide, obtenez-vous le message "Veuillez entrer une date de naissance valide", ou un autre? J'imagine que vous ne passez pas par la validation par FluentValidation dans ce cas (car il y a aussi validation pour le type de données correct dans mvc: et vous essayez de passer une valeur null dans un DateTime non nullable, même si vous écrivez "a" dans une boîte de texte liée à un type int) –
Raphaël Althaus, vous avez raison! Rendre le DoB nullable a résolu mon problème! Si vous pouvez poster une réponse réelle (et de préférence avec quelques détails pour l'ordre de validation) la prime est à vous :) – RJP