2010-04-12 4 views
1

J'ai un contrôle qui a une ImageButton qui est liée à un événement OnClick ... Après avoir cliqué sur ce contrôle, une publication est effectuée et le gestionnaire d'événements est pas appelé. AutoEventWireup est réglé sur vrai, et j'ai vérifié l'orthographe, etc. Nous n'avons pas touché à ce contrôle depuis plus d'un an et ça a bien fonctionné jusqu'à il y a quelques semaines.Le gestionnaire d'événements de contrôle ASP.NET ne se déclenche pas lors de la publication?

Nous avons apporté des modifications aux commandes qui chargent ce contrôle ... donc je me demande, quel genre de changements pourraient nous avons fait pour arrêter ce gestionnaire d'événements d'être appelé? Il y a un peu de Javascript va, donc cela pourrait être le coupable aussi ...

Edit: Quelques précisions ... nous charger dynamiquement le contrôle parent du ImageButton en cas OnLoad de la page ... si ça a du sens.

Répondre

0

Alors, il se trouve que nous avons mis la propriété PostBackUrl sur un de nos boutons de contrôle A ... cela a causé les gestionnaires d'événements pour le contrôle B ne pas tirer quand un bouton de contrôle B était pressé.

+0

Salut, je semble avoir un problème similaire. Je me demandais si vous pouviez élaborer un peu plus sur votre solution. Peut-être commencer par ce que sont les contrôles A et B? Boutons? Conteneurs Merci pour l'aide à l'avance! – John

2

AutoEventWireup n'est pas pertinent. Votre ImageButton est-il chargé dynamiquement, c'est-à-dire qu'il n'est pas écrit dans le balisage? S'il est chargé sur la page en fin de cycle de vie de la page, par ex. Dans PreRender, l'événement ne se déclenchera pas.

S'il y a un problème JavaScript de votre page ne sera même pas PostBack. Est-ce que ça arrive?

+0

La page est définitivement post-backing ...juste aucun événement ... et oui, le contrôle a l'air dynamique (nous avons un contrôle personnalisé qui le charge). – Polaris878

+0

Dans ce cas, assurez-vous qu'il est placé sur la page AVANT la partie du cycle de vie des gestionnaires d'événements. Cela signifie soit OnInit ou OnLoad. OnInit est meilleur si vous le pouvez car il réduit ViewState. c'est-à-dire que Page.Controls.Add (myImageButton) devrait avoir lieu OnInit (ou OnLoad) – BritishDeveloper

+0

Et l'événement Click de l'imageButton est-il également lié à OnLoad? Si c'est le cas, alors quelque chose de fou se passe ... (que j'ai un hack pour si vous êtes intéressé par un code sale) – BritishDeveloper

1

Je suis d'accord avec ce que dit BritishDeveloper. J'ai eu un problème similaire lorsque je chargeais dynamiquement des contrôles, mais je ne pouvais pas obtenir une référence au contrôle en utilisant Page.FindControl("controlName") Quelqu'un a fait remarquer que j'avais besoin de garder le cycle de vie de la page à l'esprit. J'ai découvert que je devais m'assurer de charger le contrôle dans le PageInit car après avoir fait une publication asynchrone, le contrôle était toujours là, mais pas chargé dans la publication, donc il n'y avait aucun moyen de le trouver. Tout cela était dans csharp codebehind et ajax, mais je suppose que le contrôle n'est pas rechargé.

2

Avez-vous donné un identifiant à l'ImageButton?

+0

Oui, il a certainement un ID :) – Polaris878

+1

N'importe lequel de ses contrôles parents (peut-être le créé dynamiquement) pas d'identifiant? La plupart du temps quand j'ai rencontré quelque chose comme ça c'est parce que quelque part le long de l'arbre de contrôle quelque chose n'a pas d'ID attribué – zincorp

+0

Cela a fait l'affaire pour moi, merci! – chteuchteu

0

Si vous créez un contrôle dynamique. Chaque fois que vous lancez une publication en utilisant le nouveau contrôle créé, vous devez le recréer. Pensez simplement que votre application fonctionne sur un serveur. Comment le serveur peut contenir des informations sur les contrôles créés dynamiquement? N'utilisez pas Page.IsPostBack pour créer une publication. PostbackUrl est une mauvaise solution. Workarround sera besoin.

0

je peux aller un peu plus en détail ... Je viens de perdre plusieurs heures fixer mon problème similaire à la question décrite ici. Au cours de la création de certains contrôles de recherche, j'ai ajouté une paire de boutons ImageButtons et défini les propriétés PostbackUrl sur eux. Quelques jours plus tard, en testant le nouveau code, j'ai remarqué qu'aucun de mes autres boutons sur le formulaire Web ne s'affichait correctement. Ils lancent une publication, mais le code-behind se comporte comme si chaque publication était une demande de page initiale et qu'aucun des gestionnaires d'événements ne tirait.

Après plusieurs heures de dépannage, je suis tombé sur ce poste. Quand je suis revenu et ai enlevé le PostbackUrl de ces deux ImageButtons, tout est revenu à la normale. Je ne sais pas pourquoi cela causait ce problème, mais le correctif mentionné ici a fonctionné pour moi. Je veux ajouter que mes ImageButtons n'ont pas été ajoutés dynamiquement ... ils étaient dans le balisage et ce problème est toujours apparu. Cherchez dans votre balisage tous les contrôles avec l'ensemble PostbackUrl ... supprimez-le (programme autour si nécessaire) ... voyez si vos gestionnaires d'événements se déclencheront correctement.

Questions connexes