2009-07-24 4 views
1

J'ai un contrôle de serveur asp.net personnalisé (en fait une version spécialisée d'une case à cocher). Je veux faire un peu de traitement sur une publication, mais seulement si le postback est le résultat d'un clic sur ce contrôle (avec autopostback étant défini sur true). Quelle est la meilleure façon de déterminer si la publication est le résultat de ce contrôle ou d'autre chose?Contrôle de serveur personnalisé asp.net - comment savoir si la publication s'est produite à cause de ce contrôle

Merci pour votre aide.

+0

Vous ne pouviez pas simplement créer un gestionnaire de clic pour votre objet personnalisé? Il sera appelé automatiquement après la publication de la page. –

+0

Je ne crois pas que les contrôles serveur personnalisés reçoivent un événement de clic. Au moins, je n'ai pas été capable de trouver quelque chose comme ça. Je pense que les événements de clic sont générés par les contrôles de bouton lorsqu'ils déterminent qu'ils étaient le contrôle à l'origine de la publication. Bien sûr, je peux manquer quelque chose ici .. –

Répondre

1

Il semble que vous pouvez utiliser event bubbling. Fondamentalement, vous devez simplement exposer l'événement onchange dans votre case à cocher (si votre contrôle serveur est un contrôle composite) à partir de votre contrôle serveur personnalisé. Ensuite, écrivez votre code de traitement spécial dans un eventhandler dans la page qui héberge le contrôle.

+0

Mon contrôle est juste une classe qui dérive de Checkbox. Je ne trouve aucun événement onchange. –

+0

S'il s'agit d'un "asp: CheckBox", l'événement s'appelle OnCheckedChanged(). Après avoir implémenté le code pour déclencher l'événement, vous appelez le gestionnaire d'événements RaiseBubbleEvent() OnCheckChanged(). – HectorMac

+0

Merci d'avoir pris le temps de répondre. En fait, la raison pour laquelle je fais cela est que l'événement CheckChanged n'est pas toujours levé quand j'en ai besoin. Si le contrôle estime que l'état de vérification n'a pas changé depuis la dernière publication, alors aucun événement. Mais si un code javascript modifiait l'état de la case sans provoquer de postback et que l'utilisateur cliquait de nouveau dans la case, le code du serveur ne connaîtrait pas l'état réellement changé (via javascript), puis reviendrait lorsque l'utilisateur cliquait dans le boîte. Il va juste voir que l'état est le même que le dernier postback et ne pas augmenter l'événement. –