2010-08-15 2 views
0

엔터프라이즈 라이브러리 유효성 검사 메커니즘을 사용하여이 문제점을 읽고 검색했습니다. 이 간단한 폼 응용 프로그램은이 문제를 보여줍니다. 메타 데이터 클래스는 유효성 검사기에서 무시됩니다. MVC 응용 프로그램에서 Entity Framework를 사용하려고합니다..Net 3.5 유효성 검사기를 사용할 때 MetadataType이 무시됩니다.

이것은 XP SP3에서 VS 2008을 사용하여 .NEt 3.5에 있습니다.

namespace ValidationTest 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

     string longname = "this is much too long to be a name"; 
     Customer2 cust = new Customer2(longname); 

     ValidationResults r = Validation.Validate<Customer2>(cust); 
     if (!r.IsValid) 
     { 
      throw new ArgumentException(); 
     } 
    } 
} 


public partial class Customer2 
{ 

    public string CustomerName; 

    public Customer2(string name) 
    { 

     CustomerName = name; 
    } 

} 

[MetadataType(typeof(CustMetadata))] 
public partial class Customer2 
{ 
} 

public class CustMetadata 
{ 
    [StringLengthValidator(0, 20)] 
    public string CustomerName { get; set; } 
} 

} 

두 파일은 모두 프레젠테이션 목적으로 같은 파일에 있습니다. StringLengthAttribute를 기본 클래스로 옮기면 작동합니다.

어떤 통찰력이라도 대단히 감사하겠습니다.

감사

답변

1

당신이보고있는 문제는 Customer2 클래스 CUSTOMERNAME의 필드하지만 CustMetadata 클래스 CUSTOMERNAME의 속성이 있다는 것이다.

당신이 CustMetadata을 변경하는 경우 :

public class CustMetadata 
{ 
    [StringLengthValidator(0, 20)] 
    public string CustomerName; 
} 

예상대로 다음 작동합니다.

Validation Application Block은 MetaData와 일치 할 때 MemberTypeName을 모두 사용합니다.

+0

고마워요. 나는 그것을 시도했지만 아직 가지 않습니다. – Jerry

+1

@Jerry - 귀하의 코드 예제를 복사하고 잘 작동합니다 (ArgumentException이 발생 함)! 제가 생각할 수있는 유일한 것은 당신이 엔터프라이즈 라이브러리 5를 사용하지 않고 있다는 것입니다. EL 4.1을 사용할 수 있습니까? –

관련 문제