我正在尝试在VB.NET中创建一个customValidAttribute
Namespace EventRules
Public Class CustomRuleAttribute
Inherits ValidationAttribute
Protected Overrides Function IsValid(value As Object, validationContext as validationContext) As ValidationResult
If EventIsInOneWeek = True Then
'Property is required
End If
Return New ValidationResult(Me.FormatErrorMessage(validationContext.DisplayName))
End Function
在我的界面中
Imports System.ComponentModel.DataAnnotations
Imports EventRules
Namespace Contracts
Public Interface IEvent
Property EventIsInOneWeek As Boolean
<CustomRule()>
Property AdditionalProperty
因此,我遇到的错误是在EventIsInOneWeek上,并说“引用非共享成员需要对象引用”
编辑:传入的对象是不同于'EventIsInOneWeek'的属性,并且我只希望EventIsInOneWeek为true时才需要它。
编辑:还更完整地更新了代码
如上所述-我正在寻找的简单解决方案是将整个业务对象都传递给validationContext
。但是,这暴露了我系统中的一些安全漏洞,因此我创建了此替代方法。
在我的基本业务逻辑中:
Public Overridable Function CheckRules() As Boolean
Me.Errors = New List(Of ValidationRules)()
Return Me.Validate(Me.Errors)
End Function
...
Public Overridable Function Validate(validationContext As ValidationContext) As IEnumerable(Of Validation Result) Implements IValidateObject.Validate
Return Nothing
End Function
并且在我的业务逻辑中,对象本身
Protected Overrides Function Validate(validationContext As ValidationContext) As IEnumerable(Of Validation Result)
Dim results = New List(Of ValidationResult)()
'valiation conditionals here
Return results
End Function
我正在将基本逻辑传递到我的业务对象中,它似乎运行良好,但是不幸的是,它没有像这样自动生成前端验证CustomValidationAttributes
。
这也使我的validationRules有一些可重用性,而在传递validationContext时将无法提供。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句