2016-08-24 3 views
6

Also verwende ich Fluent-Validierung auf einem Formular. Wenn ich auf "Senden" klicke und nichts eingegeben habe, erhalte ich einen Validierungsfehler für das Geburtsdatum. Wenn ich einen DoB eintrage, bekomme ich die Bestätigung für den Vornamen.Fluent Validation validiert nicht das gesamte Formular beim ersten Mal

Warum passiert das? Ich kann nicht herausfinden, was ich falsch verdrahtet habe.

Meine Form:

@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> 
} 

Mein Fluent Validation Code:

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"); 


     } 

My Model:

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; } 
} 

Registrieren der Validator mit Autofac:

builder.RegisterType<CustomerValidator>() 
       .Keyed<IValidator>(typeof(IValidator<CustomerModel>)) 
       .As<IValidator>(); 
+0

Könnten Sie nach dem Code, wo Sie die Validate-Vorgang durchführen, um zu sehen, wie Sie die Fehler in die Ansicht zurückkehren? – Javier

+0

Wenn Sie eine leere DoB haben, erhalten Sie die Nachricht "Bitte geben Sie ein gültiges Geburtsdatum ein" oder eine andere? Ich nehme an, dass Sie in diesem Fall nicht einmal die Validierung durch FluentValidation durchlaufen (weil es auch eine Validierung für den korrekten Datentyp in mvc gibt und Sie versuchen, einen Nullwert in eine nicht nullbare DateTime zu übergeben. Gleiches, wenn Sie "a" in schreiben ein Textfeld mit einem Int-Typ) –

+0

Raphaël Althaus, Sie sind richtig! Indem ich das DoB-NULL einstellte, behob ich mein Problem! Wenn Sie eine tatsächliche Antwort (und vorzugsweise mit einigen Details für die Reihenfolge der Validierung) posten könnten, ist das Kopfgeld Ihr :) – RJP

Antwort

1

Ich verwende auch Fluent Validation in meinem Projekt in meinem Projekt es auf die gleiche Weise arbeitet wie Sie required.I sind Ihr Code versucht haben gleiche wie mein Code funktioniert es in Ordnung finden Sie unter Code:

/// Test CODE 
/// Model Class 
[Validator(typeof (CustomerModelValidator))] 
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; 
    } 
} 
// Validator Class 
public class CustomerModelValidator: AbstractValidator <CustomerModel> { 
    public CustomerModelValidator() { 
     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"); 
    } 
} 

Hoffe es hilft dir.

Verwandte Themen