내 응용 프로그램 (ASP.NET MVC 3.0 RTM, Razor View Engine)의 경우 내 모델에 DataAnnotations를 사용하고 싶습니다. 웹 프로젝트 내에서 모델 클래스를 유지한다면 .resx
을 .resources
개의 파일에 임베드하지 않고 App_GlobalResources 또는 App_LocalResources에 resx 리소스를 가질 수 있습니다.클래스 라이브러리의 DataAnnotations 및 Resx
새로 생성 된 AppDomains 및 기타 고려 사항을 무시하면 오타 또는 잘못된 변환과 같은 현지화 된 리소스의 사소한 변경 사항이 컴파일 할 필요가 없으므로 이는 이상적입니다.
그러나 모델을 클래스 라이브러리로 이동 한 후에 .resx
파일을 출력으로 유지하고 DataAnnotations 특성을 계속 사용하는 방법이 없습니다. 내가 놓친 게 있니?
문제는 속성이 자원을 찾는 방식에 있습니다. 예를 들어, "이름"속성은 다음과 같습니다 강력한 형식의 자원 랩퍼
[Display(Name = "MyEntity_Name", ResourceType = typeof(Validations))]
[Required(ErrorMessageResourceName="MyEntity_Name_Required",
ErrorMessageResourceType = typeof(Validations))]
[StringLength(150, MinimumLength = 2)]
public string Name { get; set; }
이 요구 사항은 지난 24 시간 동안 내 존재의 파멸이되고있다.
랩퍼를 일반화하려고 시도했지만 유효성 검사 특성에서 DisplayAttribute에 대해 MyEntity_Name
이라는 랩퍼의 속성을 찾고, RequiredAttribute에 MyEntity_Name_Required
이라는 속성이있는 것처럼 보입니다. 필자는 DataAnnotations 코드에 대해 더 깊이 파고 들지 않아서 내가 할 수있는 마술이 있는지 확인했습니다. 나는 다른 누군가가 이것을 만나고 아이디어를 얻길 바랐다.
[질문
그것은 .resources
파일로 RESX 파일을 포함시키지 않고 클래스 라이브러리 (DisplayAttribute 포함) DataAnnotations의 ValidationAttributes를 사용할 수 있습니까?
미래에 둘점 :(
을, 나는 아주 최소한의 코딩 노력으로 데이터베이스 기반 리소스에 RESX에서 이동하고 싶습니다. 나는 그 지금 때문에 제한된 자원 (웃기 할 수 없습니다) 의도. 그래서, 나는 ResourceProvider를 우회하지 않도록합니다. 또한, 나는 다시 작성하거나 System.ComponentModel.DataAnnotations 네임 스페이스의 모든 속성을 포장하지 않도록합니다.
WebForms보기의 컴파일 타임 리소스는 'Content'빌드 동작으로 .resx에서 가져 오는 것처럼 보입니다. 그렇지 않으면 어쨌든 DataAnnoations에서 '포함 리소스'로 표시해야합니다. –