0

我添加了对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

这适用于所有常规DataAnnotations,但它并没有为新注释捕获它。我无法调试到Validator.TryValidateProperty,但结果返回为该属性的 true ,尽管在EndDate.

验证逻辑是否有缺陷?

4

0 回答 0