Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 企业库4.0 ValidationProvider自我验证问题_.net_Winforms_Validation_Enterprise Library_Validation Application Bl - Fatal编程技术网

.net 企业库4.0 ValidationProvider自我验证问题

.net 企业库4.0 ValidationProvider自我验证问题,.net,winforms,validation,enterprise-library,validation-application-bl,.net,Winforms,Validation,Enterprise Library,Validation Application Bl,我第一次使用Validationprovider控件。我在尝试模仿Ent Lib安装附带的ValidationQuickStart解决方案示例中所看到的功能方面取得了有限的成功 虽然我能够根据业务对象验证显示表单errorprovider图标,这些验证使用验证属性装饰BO属性,例如: <NotNullValidator(MessageTemplate:="Gender must be specified.", RuleSet:="MyRule", Tag:="Gender")> _

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

虽然我能够根据业务对象验证显示表单errorprovider图标,这些验证使用验证属性装饰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
还是我必须自己创建**自定义验证器?”然后使用其类型装饰业务对象属性

编辑:

如果ValidationProvider控件不适用于如下交叉控件验证:

如果用户在对应于业务选项属性Customer.doyousmokeck的单选按钮组中选择“Yes”选项作为布尔值,则txthowmouse控件应标记为ErrorProvider图标,指示此字段是有条件需要的

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


有没有更标准/更好的方法来实现这一点?

您不能使用自验证(或任何其他跨属性验证)使用
ValidationProvider
。它不起作用,因为
ValidationProvider
在不存在业务对象的情况下工作。它所做的是加载为单个属性定义的所有验证,并使用这些验证检查给定控件的值

跨属性验证(如自定义验证程序和自验证所做的)需要一个完全初始化的业务对象才能工作

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

(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