GetType(对象)上的EntLib验证问题 - 期望字符串不是对象?

时间:2010-02-04 01:21:31

标签: validation enterprise-library gettype

我有一个Address对象,我试图使用EntLib来验证数据:

考虑以下方法:

<ValidatorComposition(CompositionType.And, Ruleset:="FraudAnalysis")> _
<NotNullValidator(MessageTemplate:="Billing address is required.", Ruleset:="FraudAnalysis")> _
<TypeConversionValidator(GetType(Address), MessageTemplate:="Billing address must be an address object.", Ruleset:="FraudAnalysis")> _
Public Property BillingAddress() As Address
    Get
        Return _BillingAddress
    End Get
    Set(ByVal value As Address)
        _BillingAddress = value
    End Set
End Property

我创建了一个地址对象:

            Address thisAddress = new Address();
            thisAddress.Address1 = "12312 Long Street";
            thisAddress.City = "Los Angeles";
            thisAddress.State = "CA";
            thisAddress.Zip = "93322";
            // set billing address to address
            cardX.BillingAddress = thisAddress;

现在在cardX.billingAddress = thisAddress,应该触发BillingAddress属性验证器(GetType(Address))。它似乎会触发,但会返回此错误:

要验证的值不是预期的类型:预期的System.String,而是获得了地址。

有人可以在这里看到问题/建议修复吗?

感谢。

1 个答案:

答案 0 :(得分:1)

我会删除ValidatorCompositionTypeConversionValidator声明,因为我认为它们在这里是多余的。这样就可以摆脱你的错误和几行代码。

该属性已经强类型化为Address类,因此您无法在代码中将其设置为不是Address的对象,或者与{{不是多态的对象1}} - 有一个额外的验证器来检查这是多余的。

验证器的默认组合是逻辑AND无论如何,您只需要在想要OR组时指定验证器组合,或者使用组合AND / OR的更复杂的组。