【问题标题】:How to add custom validation with a FormItem-getter如何使用 FormItem-getter 添加自定义验证
【发布时间】:2012-09-08 05:15:33
【问题描述】:

我需要将字段验证为邮政编码,并且我想使用为我正在为其构建表单的表生成的FormItem-getter。没有生成“GetZipCodeZipFormItemFormItem getter,但我注意到您可以使用Validator 类验证邮政编码。我只是用我的DataModification 手动添加它,但我没有对从FormItem 的控件获取值所需的PostBackValueDictionary 的引用。

如何验证此FormItem 是否为邮政编码?

【问题讨论】:

    标签: c# asp.net validation enterprise-web-library


    【解决方案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”,主要验证将失败,因为破折号将字符串推到长度限制之外。您甚至不会使用其他验证方法。第一种方法不存在这个问题。

    【讨论】:

    • 如果我能够使用yourModObject.GetZipCodeTextFormItem,我就不必自己创建控件,也不必创建传递给我的主题的validationErrorHandler。有一个additionalValidationMethod 可选参数,但它只是将标签和验证器传递给我。那有什么意义呢?为什么这不只是给我价值,如果它未能通过我的验证,只需致电validator.NoteErrorAndAddMessage( )
    • @Sam.Rueby:我添加了第二个代码示例,展示了如何使用additionalValidationMethod 来解决问题,但正如我所说,这种方法有一个缺点。此外,additionalValidationMethod 不会将值作为参数提供给您,因为您可以轻松地从 mod 对象中检索它,如我上面所示,并且因为我们设计此方法用于进行涉及多个字段的验证(也许您需要验证例如,两个不同的邮政编码匹配)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2019-07-11
    • 2012-09-16
    相关资源
    最近更新 更多