J'ai un contrôle TextBox Asp.Net dont la propriété enabled que je dois évaluer en utilisant une classe distincte (de la code derrière la page contenant). La façon dont je veux faire est:Comment inclure une référence automatique à un contrôle serveur dans un appel de méthode externe?
<asp:TextBox ID="myTB" runat="server" Enabled="<% ToggleControl(this, "someBusinessValue") %>" ... />
La raison pour laquelle je dois passer une référence au contrôle d'appel est de voir s'il y a d'autres propriétés je besoin à considérer avant de le désactiver. Le mot clé "this" fait toutefois référence à la page dans son ensemble. Et puisque mon TextBox peut être dans un FormView, ou GridView, je ne peux pas simplement obtenir le contrôle en examinant 'page.myTB'. Je ne veux pas avoir à commencer à labourer GridViews sur le fichier de classe de réception juste pour récupérer une référence à la TextBox.
Est-ce que quelqu'un sait comment se référer à la commande en ligne de cette façon?
EDIT 1: Cela devra être fait pour plusieurs types de contrôle serveur différents, tels que ListBox, CheckBox, RadioButtonList, etc.
EDIT 2: Le meilleur que je suis venu avec jusqu'à présent est:
<asp:TextBox ID="myTB" runat="server" Enabled="<% ToggleControl(myGridView.FindControl("myTB") as WebControl, "someBusinessValue") %>"
ce qui n'est pas trop élégant, mais cela me donne l'auto-référence dont j'ai besoin.
Thats fait un dilemme intéressant. Habituellement, quand j'ai besoin de mon contrôle pour avoir une certaine logique je le sous-classerais à mon propre TextBox spécial qui a la logique à l'intérieur de lui-même. Après tout, c'est quoi OO! –
Normalement, nous ferions cela mais le comportement que nous voulons est applicable à tous les contrôles d'entrée, donc nous voudrions éviter de devoir sous-classer chaque contrôle d'entrée qui existe (et en exiger de nouveaux pour le faire aussi). Nous envisagions également d'utiliser des adaptateurs Web, mais c'est un peu plus complexe. –