2010-08-18 5 views
3

DataAnnotations, 특히 [requried]를 코드 측면에서 추가 및 제거 할 수 있습니까? 내 문제는 CRUD 응용 프로그램에서 불완전한 양식을 저장할 수있는 기능을 사용자에게 제공하지만 동시에 DataAnnotations 유효성 검사 기능을 사용하는 것입니다.코드에서 데이터 주석 추가 및 제거

이것이 가능하지 않은 경우이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변

0

DataAnnotations는 속성이므로 동적으로 추가, 제거 또는 수정할 수 없습니다. 속성은 유형의 일부이며 런타임 중에 변경할 수 없습니다. 검증이 실행 된 후

  • 당신이 그것을 사용 : 당신은 Larsenal으로 ModelState을 사용할 수

    는 것을 제공 제안했다. (그 전에 ModelState는 비어있을 것입니다. 모든 유효성 검사기에 대한 액세스를 제공하지는 않으며 유효성 검사기 오류가 발생한 후에 만 ​​유효성 검사기 오류를 저장합니다)

  • DataAnnotationValidators 및 화재를 기반으로 클라이언트 유효성 검사를 수행하지 않았습니다. 서버 측 검증에 이르지 못하게하는 오류.
2

모델에 DataAnnotation 특성을 유지 한 다음 필요에 따라 코드에서 수동으로 유효성 검사 오류를 수동으로 지울 수 있습니다.

if (certainCondition == true) { 
    ModelState["someKey"].Errors.Clear(); 
    ModelState["anotherKey"].Errors.Clear(); 
} 
+0

여기서는 DataAnnotation을 제거하는 것이 아니라 ModelErrors를 지우는 것입니다. 이 문제는 특정 오류가 아니라 모든 오류를 제거한다는 것입니다. 예를 들어, "someKey"가 필수이고 길이 제한이 있다고 가정 해보십시오. 명확하게 실행하면 두 가지 모두를 잃게됩니다. DB에 필드 길이에 대한 제한이 있으므로 길이 제한이있는 경우 저장하려고하면 저장시 데이터가 손실됩니다. 그러나 선택 오류 만 제거 할 수 있다면이 작업이 가능합니다. – Scott

+0

개인적으로 해본 적은 없지만 키에 대한 개별 오류를 제거 할 수 있다고 생각합니다. 귀하의 예제에서, 왜 StringLength 속성을 가지고 있지 않은가? 사용자가 "불완전한"양식을 저장할 수있게하려면 "필수"필드가 어떤 의미입니까? 특정 필드가 채워져 있지 않으면 입력이 "완료"되지 않는다는 것이 비즈니스 규칙일까요? – Larsenal