MVC Foolproof验证无法在Forms应用程序中使用

时间:2015-06-23 19:35:17

标签: vb.net validation foolproof-validation

我在项目中添加了对MVC Foolproof Validation的引用。我在我的模型上使用其中一个注释:

    <Required(ErrorMessage:="Start Date is required.")>
    <LessThanOrEqualTo("EndDate", ErrorMessage:="Start Date must not be after End Date.")>
    Public Property StartDate As DateTime
        Get
            Return Item.StartDate
        End Get
        Set(value As DateTime)
            Item.StartDate = value
        End Set
    End Property

    <Required(ErrorMessage:="End Date is required.")>
    Public Property EndDate As DateTime
        Get
            Return Item.EndDate
        End Get
        Set(value As DateTime)
            Item.EndDate = value
        End Set
    End Property

我们有一个验证类,它会像这样验证:

    Dim results As New List(Of ValidationResult)()

    Debug.Assert(model IsNot Nothing)
    Dim modelProperties = New List(Of PropertyInfo)
    GetModelPropertiesRecursively(model.GetType(), modelProperties)

    For Each pi As PropertyInfo In modelProperties
        Dim result = Validator.TryValidateProperty(pi.GetValue(model),
                                      New ComponentModel.DataAnnotations.ValidationContext(model, Nothing, Nothing) With {.MemberName = pi.Name}, results)
    Next
    Dim modelName = model.GetType().Name
    Dim mapped = results.Select(Function(result)
                                    Debug.Assert(result.MemberNames.Any())
                                    Return New ValidationError(modelName, result.MemberNames.First(), result.ErrorMessage)
                                End Function)

    For Each validationError As ValidationError In mapped
        context.ValidationErrors.Add(validationError)
    Next

这适用于所有常规DataAnnotation,但它没有捕获新注释。我无法调试到Validator.TryValidateProperty,但结果对于该属性来说是真实的,尽管它位于EndDate之后。

验证逻辑是否存在缺陷?

0 个答案:

没有答案