요약하면 데이터베이스 필드를 기반으로 런타임에 인스턴스 별 데이터 주석 특성을 만들려고합니다. 지금 내가 초기 모델을 만드는 데는 문제가 없지만 모델이 게시되고 서버 유효성 검사가 수행 될 때 넘어집니다.MVC : 데이터베이스를 사용하여 유효성 검사 속성 또는 대안을 구동하는 방법?
(동일한 입력 모델이 뷰 모델 내의 컬렉션에서 사용되고 있지만 컬렉션의 각 인스턴스에 다른 유효성 검사가 적용되어야합니다. 예를 들어 입력의 첫 번째 항목은 1-100의 범위이지만 같은 모델의 다음 발생은 동일한 입력 페이지에서 1000-2000의 범위가되며 다른 날짜는 6 자 여야합니다. ....)
내 문제는 여기서 내가 무슨 짓을했는지와 설명하겠습니다 :
내가 DataAnnotationsModelMetadataProvider
을 상속의 내 자신의 구현을 제공 한 내가 DataAnnotationsModelValidatorProvider
을 상속 GetValidators
의 외관 구현을 제공 한
(이 아직 .... 검증 문제에 어떤 관계가 없습니다). 여기서 내가하고 싶은 일은 데이터베이스 레코드를 기반으로 새로운 속성을 만든 다음 해당 속성을 기본 구현으로 전달하여 유효성 검사기가 그에 따라 생성되도록하는 것입니다.
그러나 ...... GetValidators
은 PROPERTY 수준에서 호출됩니다 ... validynator를 적용하려는 propertyname과 함께 호출 될 때이 propertyname에 해당하는 DB 레코드를 찾아야합니다. 내가 만들 필요가 어떤 속성을 찾을 수 있습니다 ....하지만 ... 가치 필드의 단지 propertyname에서 DB 레코드의 키를 얻을 수 없습니다 ..... 사실, DB 키는 부모 모델에 있습니다 ..... 그래서 어떻게 잡을 수 있니?!
정적 변수 (YUK)를 사용하여 하나의 속성에 대한 호출 중에 키를 저장하고 값 필드 속성에 대한 다른 호출 중에 해당 키를 검색해 보았습니다. 그러나 모델이 단방향으로 직렬화되기 때문에 그리고 필자가 요구하는 속성과 동기화가되지 않는 키로 끝나는 반대의 방식을 역 직렬화했다.
약간의 복잡성을 추가하려면 맞춤 모델 바인더도 사용하고 있습니다. 여기에 다른 곳에서 권고 한대로 CreateModel을 재정의했지만 메타 데이터 또는 추가 값을 출력 모델의 속성에 추가하는 방법을 찾을 수 없습니다 .... 모델 자체에만 .... 어떻게해야합니까? PROPERTY에 대한 GetValidators 호출 내의 MODEL 메타 데이터/추가 값?
그래서 .... 내 질문
1) 사람이 내 ValidationProvider 내 GetValidators 방법에 내 사용자 정의 모델 바인더에서 내 데이터베이스 키를 얻을 수 있도록 할 수 ..... 두 가지이다? 아니면 내 사용자 지정 메타 데이터 공급자를 사용하고 있습니까?
2) 데이터베이스 레코드를 기반으로 런타임에 유효성 검사기를 만드는 다른 방법이 있습니까?
빠른 Google 검색; 이게 당신이 원하는대로 할거에요? http://fluentvalidation.codeplex.com/wikipage?title=mvc – user1477388
FluentValidation을 살펴 보았지만 같은 문제가 발생했습니다 ... 데이터베이스 필드에서 가져온 동적 값을 사용하여 "RuleFor"를 어떻게 작성합니까? 나는 인스턴스별로 그것을하는 방법을 볼 수 없었다. 또한 엔터프라이즈 유효성 검사 블록을 살펴 보았지만 다시 ... ... 모델 별이 아닌 인스턴스 별 규칙이 필요합니다 ...... –
@DaveR - 혼란 스럽네요. 속성은 인스턴스가 아닌 유형에 적용됩니다. 그것들은 코드로 컴파일되므로, 컴파일 타임에 정의되고 런타임에는 정의되지 않습니다. –