2016-08-24 14 views
6

Vì vậy, tôi đang sử dụng Xác thực thông thạo trên biểu mẫu. Khi tôi nhấp vào gửi và không có gì được nhập, tôi nhận được lỗi xác thực cho Ngày sinh. Nếu tôi nhập DoB, thì tôi sẽ nhận được xác thực cho Tên.Xác thực thông thạo không xác thực toàn bộ biểu mẫu lần đầu tiên

Tại sao điều này lại xảy ra? Tôi không thể tìm ra những gì tôi mắc sai lầm.

hình thức của tôi:

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

My thạo 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"); 


     } 

mẫu của tôi:

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

Đăng ký validator với Autofac:

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

bạn có thể đăng các mã nơi bạn thực hiện các hoạt động Validate để xem làm thế nào bạn đang quay trở lại các lỗi để xem? – Javier

+0

Khi bạn có một DoB trống, bạn có nhận được thông báo "Vui lòng nhập ngày sinh hợp lệ" hay một ngày sinh khác không? Tôi đoán bạn thậm chí không đi qua xác nhận bằng FluentValidation trong trường hợp này (vì cũng có xác thực cho kiểu dữ liệu chính xác trong mvc: và bạn cố gắng chuyển một giá trị null vào một DateTime không có giá trị tương đương. Nếu bạn viết "a" vào một hộp văn bản liên quan đến loại int) –

+0

Raphaël Althaus, bạn đã đúng! Làm cho DoB nullable cố định vấn đề của tôi! Nếu bạn có thể gửi một phản ứng thực tế (và tốt nhất là với một số chi tiết cho thứ tự xác nhận) tiền thưởng là của bạn :) – RJP

Trả lời

1

Tôi cũng đang sử dụng Fluent Validation trong dự án của tôi trong dự án của tôi nó đang làm việc cùng một cách như bạn đang required.I đã cố gắng mã của bạn giống như mã của tôi nó đang làm việc tốt vui lòng tham khảo bên dưới mã:

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

Hy vọng nó sẽ giúp bạn.

Các vấn đề liên quan