假設yourModObject.ZipCode
是一個字符串:
yourModObject.GetZipCodeFormItem(
true,
(value, label) => new EwfTextBox(value),
(control, pbv, subject, validator) =>
validator.GetZipCode(new ValidationErrorHandler(subject),
control.GetPostBackValue(pbv),
true).FullZipCode,
value: "",
validationList: yourDataModification)
另一種方式來做到這一點是:
到第二種方法
yourModObject.GetZipCodeTextFormItem(
true,
true, // allow empty
value: "",
additionalValidationMethod: (subject, validator) =>
yourModObject.ZipCode = validator.GetZipCode(new ValidationErrorHandler(subject),
yourModObject.ZipCode,
true).FullZipCode,
validationList: yourDataModification)
一個缺點是,主驗證(即,邏輯,其存儲的值在mod對象中)不知道它是輸入的郵政編碼,例如,如果您的數據庫字段限制爲9個字符(以容納ZIP + 4),並且用戶輸入了「12345-1234」 ,主要驗證將失敗,因爲破折號推動字符串Ove長度限制。你甚至不會得到額外的驗證方法。第一種方法不存在這個問題。
如果我能夠使用使用'yourModObject.GetZipCodeTextFormItem'我就不必創建控制自己,或者必須創建validationErrorHandler與同時給我的主題通過。有一個'additionalValidationMethod'可選參數,但它只是傳遞給我一個標籤和一個驗證器。那有什麼意義呢?爲什麼沒有給我的價值,如果它沒有通過驗證,只需調用'validator.NoteErrorAndAddMessage()'? –
@ Sam.Rueby:我添加了第二個代碼示例,顯示如何使用'additionalValidationMethod'解決問題,但正如我所說的,這種方法存在缺陷。另外,'additionalValidationMethod'不會給你作爲參數的值,因爲你可以很容易地從mod對象中檢索它,就像我上面顯示的那樣,並且因爲我們設計了這個方法來進行涉及多個字段的驗證(也許你需要驗證例如,兩個不同的郵政編碼匹配)。 –