2010-10-06 21 views
0

J'ai une page ASP.Net contenant un IFrame. Dans l'IFrame, je charge un document html. Lorsque l'utilisateur clique sur un lien hypertexte dans le contenu de l'IFrame, un rappel doit être appelé dans la classe code-behind de la page ASP.Net.Comment réagir dans la classe code-behind ASP.NET lorsqu'un lien hypertexte est cliqué dans l'IFrame de la page?

Je suppose que j'ai besoin d'Ajax pour le faire mais je ne suis pas vraiment sûr de ce que je dois faire. Pourriez-vous me donner quelques indications? En passant, je suis relativement nouveau sur ASP.Net.

Merci

+0

Vous pourriez reconsidérer la conception. Faire une publication sur un lien hypertexte est considéré comme une mauvaise conception. Les liens hypertexte sont utilisés pour lier des pages et ne pas exécuter d'actions. –

+0

@Yves M. - pas nécessairement, avez-vous déjà entendu parler d'un ASP: LinkButton? – RPM1984

+0

@ RPM1984: oui. mais même si quelque chose est disponible pour faire l'impensable ... un lien ne devrait jamais être utilisé de cette façon. Et je n'ai jamais aimé la gestion post-back de asp.net non plus. –

Répondre

0

Enfin, j'ai fini par écrire un contrôle d'extension pour l'IFrame. Le contrôle d'extendeur obtient les liens contenus dans le IFrame via le suivant: Javascript

var frame = this.get_element(); 
var links = frame.contentWindow.document.getElementsByTagName("a"); 

Je puis simplement un gestionnaire attachent d'événements qui réagit à l'événement onclick de chaque lien. Le gestionnaire d'événements rappelle le côté ASP.Net via un service WCF.

Pas compliqué à faire une fois que vous connaissez les différentes technologies.

0

Parce que le document html n'est pas une page ASPX il ne sera pas en mesure de déclencher un code-behind. Si vous pouvez changer la page dans l'iframe faites-en une page aspx et gérez le clic sur un LinkButton comme vous le feriez autrement.

Une autre option consiste à modifier le lien dans la page html pour appeler une page aspx personnalisée qui répond à vos besoins, mais qui redirigera la page html vers la nouvelle page aspx.

Ou bien changer le lien pour appeler un service web via javascript (XMLHttpRequest) et laisser ce webservice faire ce que vous vouliez faire en code-behind.

+0

Je vais essayer de voir si je peux convertir la page html en une page aspx.Je ne sais pas si c'est facile à faire parce que le code HTML est généré à la volée. Merci pour votre réponse! –

0

Beaucoup de cela dépend de ce que vous voulez faire spécifiquement. Le problème que vous avez est que le DOM de la page dans l'iframe ne semble pas être dans le DOM de la page appelante. Toute la page d'appel voit la balise iframe comme une balise fermée, comme une balise d'image. Certains navigateurs détecteront un clic dans un iFrame imbriqué dans un DIV comme un clic dans la div que vous avez

<DIV id="iframediv"> 
    <Iframe blah...> 
</DIV> 

et vous pourriez être en mesure d'utiliser jQuery ou similaire pour détecter un clic à l'intérieur iframediv et faire des choses.

La vraie solution serait d'essayer de ne pas utiliser un iframe car, comme je l'ai dit, même cette solution ne sera pas nécessairement payante. Je peux penser à au moins un scénario où ne pas utiliser un iframe n'est pas une option alors je vais laisser cela.

À part cela, les suggestions de Willem semblent aussi être bonnes.

+0

En répondant à Willem, j'essaierai de me débarrasser de l'iframe. Peut-être convertir le html dans le contrôle aspx ou quelque chose comme ça. Merci pour votre contribution! –