【问题标题】:.NET Base Validator and reflection.NET 基础验证器和反射
【发布时间】:2010-02-03 17:34:03
【问题描述】:

我正在动态创建 .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

【问题讨论】:

    标签: .net reflection validation


    【解决方案1】:

    我认为你在怀疑向下转型的道路上是正确的。 Obj.GetType() 返回什么?调试器将显示该参数是一个 CompareValidator,因为它是,但如果您在传入之前对其进行了向下转换,则该信息可能无法用于该方法。

    【讨论】:

    • 不幸的是,这不是垂头丧气。我使用实际的比较验证器进行了尝试,但仍然得到相同的错误。但我确实注意到它失败的属性也是枚举。也许错误信息只是误导?或者它找不到类型作为字符串属性?因此,如果调用成员只能提供字符串参数,我如何传递枚举或其等效数字?如果谷歌帮不上忙,这个问题可能不得不以这个标题重新发布。
    【解决方案2】:

    谢谢,我现在知道了。我的方法太简单了。它仅适用于字符串属性。我收到错误是因为 InvokeMember 正在寻找“作为字符串的公共属性类型”而不是“作为 ValidationDataType 的公共属性类型”。我使用以下代码发现了这一点:

               Dim info As System.Reflection.PropertyInfo = Obj.GetType().GetProperty("Type")
                Dim EnumType As Type = info.PropertyType
                info.SetValue(Obj, [Enum].Parse(EnumType, ValidationDataType.Date), Nothing)
    

    所以你生活,你学习。我希望也许这也能帮助其他人。

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 2010-10-22
      • 1970-01-01
      • 2017-03-09
      • 2015-10-01
      相关资源
      最近更新 更多