Je crée dynamiquement des validateurs .NET et transmets la propriété que j'appelle et la valeur à une méthode qui invoque la propriété et fournit la valeur.Validateur de base .NET et réflexion
Cela fonctionne pour la plupart des propriétés. Mais lorsque j'essaie d'invoquer la méthode Opérateur ou la méthode Type du validateur de comparaison, j'obtiens une erreur indiquant que la propriété est introuvable. Le code que j'utilise est ci-dessous. Je sais qu'il faut gérer les erreurs, mais je suis encore au début du développement et je veux voir où ça explosera. Grâce au débogueur, je peux voir que le paramètre fourni en Obj est en fait un CompareValidator et possède les propriétés qui ne peuvent pas être trouvées. Je pensais que cela pourrait seulement être de trouver les propriétés de base, (je descendu au validateur de base dans l'appelant), mais cela fonctionne sur ControlToCompare qui n'est pas un membre de BaseValidator. Toute aide serait appréciée.
''' <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
Malheureusement, ce n'est pas le downcasting. Je l'ai essayé avec un validateur de comparaison réel et toujours obtenir la même erreur. Mais j'ai remarqué que les propriétés auxquelles il échoue sont aussi des énumérations. Peut-être que le message d'erreur est juste trompeur? ou il ne peut pas trouver Type en tant que propriété de chaîne? Donc, si invoke member ne peut fournir que des paramètres de chaîne, comment transmettre une énumération ou son équivalent numérique? Cette question pourrait devoir être republiée avec cela comme titre si google ne peut pas m'aider. – Frank