0

プロジェクトへの参照を追加しましたMVC Foolproof Validation。モデルで注釈の 1 つを使用しています。

    <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の s で機能しますが、新しい注釈ではキャッチされません。にデバッグできませんValidator.TryValidatePropertyが、 の後であるにもかかわらず、結果はプロパティに対して true として返されますEndDate

検証ロジックに欠陥はありますか?

4

0 に答える 0