La propriété Get de la propriété Visible d'un contrôle recherche récursivement l'arborescence pour indiquer si le contrôle sera rendu ou non.Comment obtenir l'ensemble/la valeur réelle de la propriété Visible dans Asp.Net
J'ai besoin d'un moyen de voir quelle est la valeur visible "locale" d'un contrôle indépendamment de ce que ses contrôles parents sont définis. c'est-à-dire si elle était elle-même définie sur Vrai ou Faux.
J'ai vu cette question, How to get the “real” value of the Visible property? qui utilise Reflection pour obtenir l'état local, mais je n'ai pas réussi à le faire fonctionner avec WebControls. C'est aussi une méthode plutôt sale pour obtenir la valeur.
J'ai mis au point la méthode d'extension suivante. Cela fonctionne en supprimant le contrôle de son parent, en vérifiant la propriété, puis en replaçant le contrôle là où il l'a trouvé.
public static bool LocalVisible(this Control control)
{
//Get a reference to the parent
Control parent = control.Parent;
//Find where in the parent the control is.
int index = parent.Controls.IndexOf(control);
//Remove the control from the parent.
parent.Controls.Remove(control);
//Store the visible state of the control now it has no parent.
bool visible = control.Visible;
//Add the control back where it was in the parent.
parent.Controls.AddAt(index, control);
//Return the stored visible value.
return visible;
}
Est-ce une façon acceptable de le faire? Cela fonctionne bien et je n'ai rencontré aucun problème de performance. Il semble juste extrêmement sale et je ne doute pas qu'il pourrait y avoir des cas où il pourrait échouer (par exemple, lors du rendu).
Si quelqu'un a des idées sur cette solution ou mieux encore une meilleure façon de trouver la valeur alors ce serait génial.
Quel problème rencontrez-vous lorsque vous utilisez la méthode de réflexion? – slugster
GetMethod pour GetState renvoie null pour un System.Web.UI.Control. –