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는 검색된 정규 표현식의 서버 측 유효성을 검사합니까? 무시할 수있는 다른 옵션이 있습니까?
감사합니다.