我创建.NET验证动态和通过我调用属性和值来调用该属性,并将该值的方法。.NET基校验器和反射
这是工作的大部分特性。但是,当我尝试调用Operator方法或比较验证程序的Type方法时,出现错误,指出无法找到该属性。我正在使用的代码如下。我知道它需要错误处理,但我仍处于早期开发阶段,并希望看到它发生了什么。通过调试器,我可以看到,作为Obj提供的参数确实是一个CompareValidator,并且具有无法找到的属性。我认为它可能只是找到基本属性,(我向调用方中的基础验证器向下转发),但它在不是BaseValidator成员的ControlToCompare上工作。任何帮助,将不胜感激。
''' <summary>
''' Invokes a property on the supplied object
''' </summary>
''' <param name="Obj">Object to invoke the property on</param>
''' <param name="PropertyName">Name of the property to invoke</param>
''' <param name="PropertyValue">Value of the property</param>
''' <returns></returns>
''' <remarks>Uses reflection to invoke the property</remarks>
Private Function InvokeProperty(ByVal Obj As Object, ByVal PropertyName As String, ByVal PropertyValue As String) As Object
Dim Params(0) As String
Params(0) = PropertyValue
Return Obj.GetType().InvokeMember(PropertyName, Reflection.BindingFlags.SetProperty, Nothing, Obj, Params)
End Function
不幸的是,它不是倒转。我用一个实际的比较验证器尝试了它,仍然得到相同的错误。但我确实注意到它失败的属性也是枚举。也许错误信息只是误导?或者它不能找到类型作为一个字符串属性?因此,如果invoke成员只能提供字符串参数,我该如何传递一个枚举或其等价的数字? 如果谷歌不能帮助我,那么这个问题可能必须作为标题转贴。 – Frank 2010-02-03 18:21:39