2013-08-02 1 views
2

Orchard의 관리자 페이지에서 클라이언트 측 유효성 검사를 사용하려고합니다. 나는 그것이, this question에서 논의 된 기술을 사용하여 작업하기에하지만 일부 파고 오차드 소스 및 온라인을 수행 한 후 성공했습니다, 일부는 내장 전복되는이 라인 오차드 클라이언트 측 유효성 검사 - 어떻게 보이게/작동해야합니까?

// Register localized data annotations  
ModelValidatorProviders.Providers.Clear(); 
ModelValidatorProviders.Providers.Add(new LocalizedModelValidatorProvider()); 

을 주석 나에게 보인다 지역화 된 오류 문자열을 허용하는 오차드 기능. 이 시점에서 OrchardStarter.cs에있는이 줄을 사용하는 것이 검증 작업과 저를 위해 작동하지 않는 유일한 차이입니다.

내가 원했던 것은 이것에 대한 지침이며, 아마도 오차드 팀에서 나온 것입니다. 유효성 검사를 수행하기 위해이 줄을 꺼내야한다면 왜 그곳에있는 것입니까? 좋은 이유가있을 경우, 클라이언트 쪽 유효성 검사를 수행하려는 시도에서 내가 (그리고 다른 사람들이) 잘못하고있는 것은 무엇입니까? 필요하다면 코드 샘플을 게시해도 좋지만 데이터 주석이 포함 된 꽤 표준 ViewModel입니다. 감사.

답변

2

DataAnnotationsModelValidatorProvider (DAMVP)을 오차 코드 자체 구현으로 대체하여 오차 메시지 방식으로 유효성 검사 메시지를 현지화 할 수 있습니다. 그것이 이루어지는 방식은 예를 들면 다음과 같습니다. [Required][LocalizedRequired]으로 변경하고 제어를 DAMVP으로 전달합니다. DAMVP이됩니다.하지만 Orchard가 속성을 "엉망으로 처리 한"후에 만 작동합니다.

DAMVP은 클라이언트 유효성 검사 특성을 적용하기 위해 Attribute 유형을 사용합니다. 이제 예를 들어 찾을 수 없습니다. 은 LocalizedRequiredAttribute으로 바뀌 었습니다. 따라서 어떤 클라이언트 유효성 검사 속성에 추가해야하는지는 알 수 없습니다.

그래서 라인을 주석 처리하면 오차드의 현지화를 잃게됩니다. 그들을 버리면 고객 유효성을 잃게됩니다.

작업 (원의 코드를 통해 충분히 보았다, 그리고 순간에 테스트하지 않는 수단을 가지고 있지 않은) 문제를 해결하는 것이

하나는 원의 Localized 속성을 알고 DAMVP를 만들기 위해 그들과 함께 무엇을해야하는 것입니다.

DAMVP은 속성에 대한 새로운 클라이언트 규칙을 추가하기 위해 정적 인 RegisterAdapter() 메소드를 가지고 있습니다. 사용할 속성의 유형과 클라이언트 측 어댑터 (클라이언트 속성 추가를 처리하는 클래스)의 유형을 사용합니다. 그래서

, 다음과 같이 작동 될 수 있습니다

을 OrchardStarter.cs에서 :

// Leave the LocalizedModelValidatorProvider lines uncommented/intact 

// These are the four attributes Orchard replaces. Register the standard 
// client adapters for them: 

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(LocalizedRegularExpressionAttribute), 
    typeof(RegularExpressionAttributeAdapter) 
); 

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(LocalizedRequiredAttribute), 
    typeof(RequiredAttributeAdapter) 
); 

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(LocalizedRangeAttribute), 
    typeof(RangeAttributeAdapter) 
); 

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(LocalizedStringLengthAttribute), 
    typeof(StringLengthAttributeAdapter) 
); 

공식 단어에 관해서는, 지역화 검증이 1.3에 도입 된 이후이 일을하지 않은 것 같다 영향은 낮음으로 간주됩니다. http://orchard.codeplex.com/workitem/18269

따라서 현재 질문 제목에 대한 공식 답변은 "안됩니다"입니다.

+0

감사합니다. 나는 상황에 대해 이미 알고 있거나 추측 한 것을 취하여 내가하지 않은 것과 함께 엮어서 내게 필요한 답을주었습니다. 매우 감사. – Zannjaminderson