0

我第一次使用 Validationprovider 控件。我在尝试模仿我在 Ent Lib 安装附带的 ValidationQuickStart 解决方案示例中看到的功能时取得了有限的成功。

虽然我能够根据使用验证属性装饰 BO 属性的业务对象验证来显示表单错误提供程序图标,例如:

<NotNullValidator(MessageTemplate:="Gender must be specified.", RuleSet:="MyRule", Tag:="Gender")> _
      Public Shadows Property Gender() As String
        Get
            Return MyBase.Gender
        End Get
        Set(ByVal value As String)
            MyBase.Gender = value
        End Set
    End Property

但是,如果我想向“SelfValidation”方法添加一个编辑,我将如何将 Result 绑定到表单控件?

(In Self Validation)

If Me.Attornet s Nothing Then
    Dim result As New ValidationResult("Attorney selection is required", Me, Nothing, Nothing, Nothing)
    results.AddResult(result)
End If

还是我必须自己创建 **CUSTOM VALIDATOR?”,然后使用它的类型来装饰业务对象属性?

编辑:

如果 ValidationProvider 控件不适合像这样的跨控件验证:

如果用户在与 Business Option 属性 Customer.DoYouSmokeCrack As Boolean 对应的单选按钮组中选择“是”选项,则 txtHowMuch 控件应标记为 ErrorProvider 图标,指示此字段是有条件的必需字段。

我现在这样做的方式是在自我验证块中执行此操作,当我将 ValidationResult 对象添加到集合时,我将 Key 属性设置为“Explanation”,以便 GUI 可以使用它手动映射到有问题的屏幕控制。

有没有更标准/更好的方法来做到这一点?

4

1 回答 1

2

您不能使用ValidationProvider. 它不会工作,因为ValidationProvider没有业务对象存在的工作。它所做的是加载为单个属性定义的所有验证,并使用这些验证检查给定控件的值。

跨属性验证,例如自定义验证器和自我验证确实需要完全初始化的业务对象才能工作。

如果验证很简单并且验证单个属性(不做任何其他事情,例如进入数据库等),您可以编写一个自定义验证属性来进行验证。在所有其他情况下,您应该做的是在用户点击“保存”后创建业务对象(无论如何您可能会这样做)并在此时验证对象。换句话说,您延迟验证直到用户提交他的更改。

于 2011-04-19T20:52:32.583 回答