2013-05-05 1 views
0

Durandal/Breeze/Knockout으로 프로젝트를 개발합니다. 지금 당장, 정규식으로 내보기에서 입력 필드의 유효성을 검사해야합니다.Breeze에서 정규식 서버 측을 인식하지 못합니다.

public class Transport 
{ 
    [Key] 
    public int Id { get; set; } 
    [Required, RegularExpression(@"^\d{2}\.\d{3}$")] 
    public string AffairNumber { get; set; } 
    ... 

그런 다음 클라이언트 측, 나는이 같은 검증이 주석을 구문 분석하고 삽입하는 기능이 있습니다 :

내 첫 번째 시도는 다음과 같이 내 엔티티 프레임 워크 모델에 데이터 주석 서버 측을 삽입했다

var addValidationRules = function(entity) { 

    var entityType = entity.entityType; 

    if (entityType) { 
     for (var i = 0; i < entityType.dataProperties.length; i++) { 
      var property = entityType.dataProperties[i]; 
      var propertyName = property.name; 
      var propertyObject = entity[propertyName]; 

      var validators = []; 
      for (var u = 0; u < property.validators.length; u++) { 
       var validator = property.validators[u]; 
       var nValidator = { 
        propertyName: propertyName, 
        validator: function (val, other) { 
         var error = this.innerValidator.validate(val, { displayName: this.propertyName }); 
         this.message = error ? error.errorMessage : ""; 
         return error === null; 
        }, 
        message: "", 
        innerValidator: validator 
       }; 
       validators.push(nValidator); 
      } 
      propertyObject.extend({ 
       validation: validators 
      }); 
     } 

     for (var i = 0; i < entityType.foreignKeyProperties.length; i++) { 
      var property = entityType.foreignKeyProperties[i]; 
      var propertyName = property.name; 
      var propertyObject = entity[propertyName]; 

      var validators = []; 
      for (var u = 0; u < property.validators.length; u++) { 
       var validator = property.validators[u]; 
       var nValidator = { 
        propertyName: propertyName, 
        validator: function (val, other) { 
         var error = this.innerValidator.validate(val, { displayName: this.propertyName }); 
         this.message = error ? error.errorMessage : ""; 
         return error === null; 
        }, 
        message: "", 
        innerValidator: validator 
       }; 
       validators.push(nValidator); 
      } 
      propertyObject.extend({ 
       validation: validators 
      }); 
      if (!property.isNullable) { 
       //Bussiness Rule: 0 is not allowed for required foreign keys 
       propertyObject.extend({ notEqual: 0 }); 
      } 
     } 
    } 
    log('Validation rules added', entity, false); 
}; 

이 기능은 각 엔티티라고 나는 이런 식으로 확인하고 싶습니다 :

function transportInitializer(transport) { 
    addValidationRules(transport); 
}; 

이 솔루션은 Required과 같은 기본 유효성 검사에서만 작동하지만 정규식 유효성 검사에서는 작동하지 않습니다.

내 실제 솔루션은이 같은 패턴으로 내 관찰 재산 affairNumber을 '확장'하는 것이 었습니다 : 잘못된 값이 내 입력에 입력 될 때

transport.affairNumber.extend({ 
    pattern: { 
     message: 'The affair number must be correctly formatted', 
     params: '^\\d{2}\\.\\d{3}$' 
    } 
}); 

그래서 검증에 실패했습니다. 클라이언트 쪽에서 유효성 검사를 복제하는 대신 Entity Framework 모델 (서버 쪽)에서 유효성 검사를 설정하는 것이 더 바람직하기 때문에이 솔루션에 상당히 만족합니다.

내 질문 : Breeze는 검색된 정규 표현식의 서버 측 유효성을 검사합니까? 무시할 수있는 다른 옵션이 있습니까?

감사합니다.

답변

0

Breeze는 [정규식] 데이터 주석 유효성 검사를 클라이언트에 전파하지 않습니다. 그것은 감독입니다. 나는 이전에 그것을 내부적으로 언급했다. 목소리를 낼 시간은 voting for it on User Voice입니다.

관련 문제