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}$'
}
});
所以當不正確的值在我輸入時輸入的驗證失敗。我對此解決方案非常滿意,因爲我更喜歡在我的實體框架模型(服務器端)上設置驗證,而不是在客戶端重複驗證。
我的問題:Breeze是否允許我驗證我的正則表達式檢索的服務器端?我忽略了另一個選項嗎?
謝謝。