【问题标题】:Enterprise Library 4.0 ValidationProvider Self Validation questionEnterprise Library 4.0 ValidationProvider 自我验证问题
【发布时间】:2011-04-19 19:55:52
【问题描述】:

我是第一次使用 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 可以使用它手动映射到有问题的屏幕控制。

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

【问题讨论】:

    标签: .net winforms validation enterprise-library validation-application-bl


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多