我創建.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