2011-01-22 31 views
13

tôi có erorr:Xác thực thông thạo. Lỗi: tên loại Validation trong quy tắc xác nhận khách hàng không phô trương phải là duy nhất

Validation type names in unobtrusive client validation rules must be unique. The following validation type was seen more than once: required. The following validation type was seen more than once: required

tôi sử dụng máy chủ xác nhận. Và tất cả đều ổn. Nhưng bây giờ tôi muốn nói để sử dụng xác nhận phía máy khách và tôi đã gặp vấn đề này.

Đây là mã lớp xác nhận của tôi:

public class TestViewDataValidation : BaseTestCreateViewDataValidation<BaseTestCreateViewData> 
    { 

public TestViewDataValidation() 
     { 
      this.RuleFor(x => x.Login).NotNull(); 
      this.RuleFor(x => x.Login).NotEmpty(); 
      this.RuleFor(x => x.Login).EmailAddress();   
     } 
} 

Nhưng nếu tôi rời khỏi một validator - tất cả hoạt động tốt. Tôi nên làm gì để có thêm một xác thực cho trường.

Trả lời

16

FluentValidation.NET được gọi thạo vì nó cung cấp một fluent interface cho các phương pháp chaining:

public TestViewDataValidation() 
{ 
    RuleFor(x => x.Login) 
     .NotNull() 
     .NotEmpty() 
     .EmailAddress(); 
} 

Ghi chú: việc sử dụng NotNullNotEmpty quy tắc dường như reduntant với tôi trong trường hợp này. NotEmpty là đủ.

26

Lỗi này được hiển thị nếu bạn có cùng xác thực trên cùng một phần tử nhiều lần.

Không đặt AddImplicitRequiredAttributeForValueTypes = false cho cả DataAnnontations mặc định FluentValidation của bạn sẽ thêm một xác nhận yêu cầu trên bất kỳ ValueTypes (như một int). Nếu bạn đồng thời thêm thuộc tính RuleFor (hoặc thuộc tính [Required]) vào bất kỳ ValueType nào, bạn sẽ có một Yêu cầu bổ sung cho trường đó.

Vì lý do đó (Tôi muốn đặt tất cả các kiểm chứng thực một cách rõ ràng) Tôi đã sau trong Application_Start() tôi:

var fluentValidationModelValidatorProvider = new FluentValidationModelValidatorProvider(new AttributedValidatorFactory()); 
ModelValidatorProviders.Providers.Add(fluentValidationModelValidatorProvider); 
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 
fluentValidationModelValidatorProvider.AddImplicitRequiredValidator = false; 
+5

Giống như Darin đang nói, thêm notnull và NotEmpty * là * không cần thiết, và không chỉ có vậy. Nó thực thi cùng một xác nhận hai lần, do đó lỗi tôi mô tả ở đây trong bài viết của tôi ... –

+0

bằng cách nào đó, điều này không làm việc cho xác nhận clientside chỉ cho serverside..on phía khách hàng asp.net mvc phát ra các thuộc tính cần thiết trên tất cả các lĩnh vực không có vấn đề rằng tôi đặt AddImplicitRequiredAttributeForValueTypes thành false :(Tôi hỏi similira về điều này trên bài đăng này http://stackoverflow.com/questions/8011615/clientside-validation-attributes-on-hidden-radio-dropdown-elements-by-default-i và không nhận được câu trả lời ... Tôi có làm điều gì đó sai hoặc xác thực quy tắc và logic là không ổn định trên máy chủ và trên máy khách ?? thanx – Marko

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