Bonjour,
Je suis en train de développer un contrôle web, et j'ai un petit soucis concernant la propriété ID : Si ce contrôle est ajouté par l'IDE de Visual studio, pas de problème un ID unique est attribué par l'éditeur. Mais si ce contrôle est ajouté à la page par code, et que le développeur ne précise pas l'ID alors cette propriété reste null, ce qui rend le fonctionnement de la couche Javascript associé impossible. J'avais donc ajouté le code suivant :
Comme cela, un ID était attibué, avec la garantie d'être unique. Si l'utilisateur fixe ensuite un ID manuellement alors tant mieux, sinon l'ID auto permettait le fonctionnement normal du code Javascript associé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public class MonControle : System.Web.UI.Control { static int lastUid; .... public MonControle { this.ID = "MonControleAuto" + (lastUid ++).toString(); .... } static MonControle { lastUid = 0; } }
MAIS :
La propriété static lastUid est conservée même après un rechargement de page. Pire encore, il n'est même pas lié à une session car tous les utilisateurs se partagent cette propriété... Donc on rique d'atteindre assez rapidement un dépassement de capacité
Ma question :
Comment faire en sorte que cette propriété ne soit pas conservée entre deux chargement de page ? (Etant donné que c'est un contrôle que je développe, je ne peux pas utiliser l'évènement Page_Load)
Ou bien comment attribuer un ID unique par défaut ?
Dans le pire des cas, je gère le problème comme cela :
Mais c'est dommage de le forcer à attribuer cet ID.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 protected override void Render(System.Web.UI.HtmlTextWriter output) { if (this.ID == null) { output.write ("Erreur ID non défini"); return; } .... }
PS : J'avais essayé ceci avant de passer par une propriété static :
Mais en créant deux controles l'un derrière l'autre, ils héritaient du même ID (différent à chaque changement de pagde grâce à Random, mais identique à chaque fois pour les deux objets)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class MonControle : System.Web.UI.Control { .... public MonControle { this.ID = "MonControleAuto" + (new Random()).Next().ToString(); .... } }
Partager