eryver
Messages postés12Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 4 octobre 2007
-
6 août 2007 à 16:48
eryver
Messages postés12Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 4 octobre 2007
-
8 août 2007 à 17:46
Bonjour,
j'ai créé un composant qui hérite de LinkButton.
J'ai surchargé l'evenement OnClick:
protected
override
void OnClick(
EventArgs e)
{
base.OnClick(e);
if (!
string.IsNullOrEmpty(Page.Request.Params[
"__EVENTTARGET"]) && Page.Request.Params[
"__EVENTTARGET"] == ClientID)
{
Le problème, c'est que lorsque j'utilise mon composant dans la meme page qu'un autre composant qui fait un __doPostBack, l'evenement de l'autre composant est capturé par le mien. Ou pire, si je met deux fois mon composant dans la meme page, il rentre systématiquement dans le dernier.
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 6 août 2007 à 21:09
bonsoir,
eryver ce que tu essayes de faire est extremement sale :-) ce n'est pas comme ca qu'il faut faire ! La solution apporté par yann_lo_san est déjà beaucoup plus propre mais à quoi bon recoder un linkbutton ?
Le plus simple pour toi est d'hériter de linkbutton et dans le constructeur de ton controle tu t'abonnes à ton évenement click ce qui t'évites de tester les champs __EventTarget & co (laisse ASP.net faire son boulot, au lieu de rajouter des bugs ;))
Ensuite si tu veux rajouter des controles dans ton linkbutton (ce que je te déconseille) il faut implémenter l'interface INamingContainer et rajouter tes controles dans la méthode (surchargé) CreateChildControls (this.Controls.Add(monButton);) tu auras beaucoup moins de problème ...
Mais cette solution pose un problème puisque tu rajouteras tes controles dans une balise Cyril - MSP - MCPD ASP.net & MCTS SQL
eryver
Messages postés12Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 4 octobre 2007 7 août 2007 à 11:15
Re ^^
Je tiens a préciser quand meme qu'il s'agit d'une migration de C# 1.0 vers 2.0 d'un composant fait par un ancien collègue.
En 1.0 tout fonctionnait bien mais depuis le 2.0, dès qu'un __doPostBack est executer dans la page, on rentre systématiquement dans la méthode RaisePostBackEvent(string eventArgument) du derniere controle "perso".
J'ai essayé la technique de yann_lo_san (qui est plus propre en effet, merci :) ) mais voila j'obtient le meme resultat.
J'ai enlevé l'heritage de LinkButton pour hériter de UserControl mais bon... pas mieux.
Tout fonctionne bien mis a par le fait que tout les evenements __doPostBack ne sont pas envoyés vers le bon control. Je ne comprend pas comment c'est possible. Quand que regarde Page.Request.Params["__EVENTTARGET"]) , c'est bien le controle sur le quel j'ai clické qui est dedans et pourtant il ne me dirige pas sur ce controle !
Merci encore d'essayer de m'aider
Vous n’avez pas trouvé la réponse que vous recherchez ?
eryver
Messages postés12Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 4 octobre 2007 7 août 2007 à 11:45
J'ai essayé de faire comme jesusonline m'a dis.
J'ai enlevé tout le code Click, RaisePostBackEvent ... j'ai juste hérité de link bouton, et dans le constructeur, je me suis abonné a l'evenement click.
Et j'obtient exactement le meme résultat qu'avant.
Systematiquement si je submit ma page ou que je clic sur un bouton avec retour serveur, il rentre dans le click de mon controle "selecteur". C'est quand meme bizzare comme truc
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 7 août 2007 à 11:49
hériter de UserControl ne sert à rien si le controle n'est pas lié à un fichier .ascx :p
Peux tu nous montrer le code de ton controle que tu as maintenant ?
et une page toute simple qui illustre le problème. Car là si tu fais un compositecontrol, c'est ASP.net qui gère les evenements, toi tu ne fais que t'abonner à ces événéments et il n'y a pas de raisons que ASP.net s'emmelle les pinceaux.
eryver
Messages postés12Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 4 octobre 2007 8 août 2007 à 12:32
Merci beaucoup.
J'ai modifié mon controle pour en faire un controle composite et tout fonctionne super.
Bon l'impacte le code metier du controle est assez important mais bon ... au moins ca fonctionne.
J'ai donc
- fait hérité mon controle de CompositeControl
- Ajouté mes composant textbox et bouton dans la methodé override CreateChildControls() a l'aide de this.Controls.Add(textbox);
- Dans mon constructeur, je me suis abonné a l'évenement Click de mon bouton pour lancer mon propre evenement OnClick(newEventArgs());
eryver
Messages postés12Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 4 octobre 2007 8 août 2007 à 15:53
Pour utiliser ca :
public
event
EventHandler
Click
{
add
{
Events.AddHandler(
"Click"
,
value
);
}
remove
{
Events.RemoveHandler(
"Click"
,
value
);
}
}
Ce qui permet ensuite plus loin dans le code, de faire ou non un retour coté serveur en fonction du fait qu'une page est abonné ou non a l'évenement clic du controle.
Je sais pas si il y a moyen de faire autrement, j'ai réutilisé ce qui était déjà fait dans le controle
eryver
Messages postés12Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 4 octobre 2007 8 août 2007 à 16:30
Oups, j'avais pas fait attention ^^
Merci.
J'en profite pour reposer une question.
Comment je peux faire pour que coté client en faisant un getElementById('idDeMonControle').value, je recupere la valeur de ma textbox ?