3

생성 된 클래스를 모델로 사용하고 있으며 일부 속성에 DataAnnotation 특성을 추가하려고합니다. 생성 된 코드이므로 주석을 직접 추가하고 싶지 않습니다. 재산에 부착 할 수있는 또 다른 방법이 있습니까?MVC 2 DataAnnotation 속성을 기존 속성에 추가 할 수 있습니까?

나는 모델을 인터페이스로 만들고 부분 클래스를 사용하여 생성 된 클래스를 구독하도록 고려했다. 그보다 덜 정교한 해결책이 있을까요?

답변

6

예 있습니다. 예제 ebove의 OriginalModel에서

[MetadataType(typeof(MyModelMetadata))] 
public partial class OriginalMyModel 
{ 
} 

public class MyModelMetadata 
{ 
    [Required] 
    public string MyProperty; 

    // ... 
} 

이 적절한 모델 클래스이며, MyModelMetadata 클래스입니다 : 당신은 당신의 원래 모델과 동일한 특성을 갖 메타 데이터 클래스를 생성하고 MetadataType 속성으로 모델에 연결해야 주석 속성에만 사용됩니다. MyModelMetadata는 모델에있는 것과 동일한 속성을 가져야합니다.

+0

public class partial MyModelMetadata를 Entity Framework/LINQ to SQL의 partial을 대상으로 사용하는 경우가 많습니다. 코드를 구분하는 것이 좋지 않은 경우도 있습니다. –

+0

고맙습니다. 그게 바로 내가 원하는 것입니다. 생성 된 클래스에 직렬화 속성을 추가하거나 MVC에만 해당하는 기능을 추가 할 수 있습니까? hte 메타 데이터 클래스가 동일한 속성을 가져야한다고 말하면 –

+0

DataAnnotation 특성은 MVC와 완전히 독립적이며 유효성 검사를 관리하는 여러 가지 방법 중 하나 일 뿐이며 MVC2 기본 모델 바인더는 기본적으로이 특성을 사용합니다. 모든 모델 속성을 가질 필요는 없습니다. 주석을 달 필요가있는 요소 만 필요합니다. 직렬화 속성의 의미는 무엇입니까? – PanJanek

2

당신은 당신의 클래스에 MetadataType 속성을 사용할 수 있습니다 :

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute.aspx

실제로, 나는 메타 데이터는하지만, 꽤 자주 발생 모델과 동기화 나가 본 적이 몇 가지로 이어질 수있는 두통. 데이터 주석 대신 대체 검증 메커니즘을 조사하는 것이 좋습니다.

나는 매우 쉽게 픽업하여 사용하기 쉬운 Fluent Validation을 사용했습니다. Fluent Validation 2.0 (아직 베타 버전)의 xVal 통합 피쳐 (Fluent Validation)에 대해서도 Fluent Validation을 수행하여 클라이언트 측 유효성 검사를 위해 프로젝트로 가져올 수 있습니다.

Fluent Validation을 사용하면 별도의 클래스에서 유효성 검사를 정의 할 수 있습니다. 생성 된 클래스에 속성을 추가하여 부분 클래스를 통해 사용할 수있는 유효성 검사기를 알려주면됩니다.

또는 데이터 주석이 포함 된 도메인 모델에서 매핑 된보기 특정 모델을 만들 수 있습니다. 이 경우 AutoMapper 같은 것을 사용하여 앞뒤 매핑을 단순화하십시오. 그런 다음 도메인 모델이 변경되면 메타 데이터 접근 방식과 비교하여 컴파일 타임 오류가 발생합니다.

+0

DataAnnotationValidators는 매우 유연하며 .NET을위한 구축 된 유효성 검사 프레임 워크. xVal 등,하지만 난 ASP.NET MVC와 함께 특히 그들을 사용하는 부분입니다. –