2012-09-03 45 views
1

我需要驗證一個字段作爲一個郵編,我想用FormItem -getter,對於我建立了一個表格表生成。有沒有產生「GetZipCodeZipFormItemFormItem消氣,但我注意到,你可以驗證與Validator類郵編。我只是用我的DataModification手動添加它,但我沒有提及從FormItem的控制中獲取值所需的PostBackValueDictionary如何添加自定義驗證用的FormItem拼命三郎

我如何驗證此FormItem作爲郵編?

回答

1

假設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長度限制。你甚至不會得到額外的驗證方法。第一種方法不存在這個問題。

+0

如果我能夠使用使用'yourModObject.GetZipCodeTextFormItem'我就不必創建控制自己,或者必須創建validationErrorHandler與同時給我的主題通過。有一個'additionalValidationMethod'可選參數,但它只是傳遞給我一個標籤和一個驗證器。那有什麼意義呢?爲什麼沒有給我的價值,如果它沒有通過驗證,只需調用'validator.NoteErrorAndAddMessage()'? –

+1

@ Sam.Rueby:我添加了第二個代碼示例,顯示如何使用'additionalValidationMethod'解決問題,但正如我所說的,這種方法存在缺陷。另外,'additionalValidationMethod'不會給你作爲參數的值,因爲你可以很容易地從mod對象中檢索它,就像我上面顯示的那樣,並且因爲我們設計了這個方法來進行涉及多個字段的驗證(也許你需要驗證例如,兩個不同的郵政編碼匹配)。 –

相關問題