2010-10-25 25 views
1

J'utilise fancybox pour afficher le contenu d'un div en cliquant sur un lien. Cela fonctionne en utilisant le code ci-dessous:Comment faire pour obtenir un UpdatePanel dans le fonctionnement de fancybox

<a id="popupTrigger" href="#popup">popup trigger</a> 

<div style="display:none"> 
    <div id="popup"> 
     <asp:UpdatePanel ID="HerkomstCodeUpdatePanel" runat="server" UpdateMode="Conditional"> 
      <ContentTemplate> 
       This content displays inside fancybox. 
       <asp:TextBox ID="CurrentTimeTextBox" runat="server"></asp:TextBox> 
       <asp:Button ID="RefreshContentButton" runat="server"></asp:Button> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </div> 
</div> 

Et le JScript:

$(document).ready(function() { 
    $("#popupTrigger").fancybox({ 
     autoDimensions: false, 
     height: 250, 
     transitionIn: 'elastic', 
     transitionOut: 'elastic', 
     width: 400 
    }); 
}); 

Maintenant, ce que je me attends qu'il ferait est que lorsque vous cliquez sur le bouton (qui est affiché à l'intérieur fancybox), il serait mettre à jour la zone de texte et faire tout ce que je définis à faire dans le codebehind. Malheureusement, rien ne se passe lorsque je clique sur le bouton.

J'ai essayé de déclencher un __doPostback moi-même en passant le ClientID de l'updatepanel et/ou le bouton lui-même. Cependant, je n'arrive pas à déclencher l'événement dans le codebehind. Le problème est que si je supprime la fancybox, le panneau de mise à jour fonctionne comme prévu. Donc, je devine si je peux d'une manière ou d'une autre savoir quelle logique d'eventhandler est derrière le bouton avant de créer la fancybox, je pourrais peut-être recréer la logique d'eventhandler après attacher la fancybox? Je ne peux pas le trouver nulle part ...

J'utilise WebForms 3.5 et ASP.Net JQuery 1.4.1

Mise à jour

je l'ai eu pour déclencher l'événement Button_Click codebehind en remplaçant l'événement de clic côté client sur le bouton en utilisant le code ci-dessous. La clé consiste à utiliser le nom du bouton en tant qu'objet émetteur pour l'événement __doPostBack. Le seul problème qui reste est que toutes les autres valeurs ne sont plus postées. Si je tape quelque chose dans la zone de texte, cliquez sur le bouton, mon codebehind ne sait plus ce qu'il y a dans la zone de texte.

$("#popupTrigger").fancybox({ 
    //.... other options, 
    onComplete: function() { 
     $("#RefreshContentButton").click(function() { 
      __doPostBack($(this).attr('name'), ''); 
     }); 
    } 
}); 
+0

J'ai renoncé. Je vais laisser cette question ouverte juste au cas où quelqu'un pourrait trouver une solution brillante. Je ne peux pas épargner plus de temps pour enquêter sur – Peter

Répondre

6

Le problème réside dans fancybox. En fait, il vous place à l'extérieur du formulaire quand il les affiche. Ce que vous devez faire est de modifier votre plugin fancybox comme ceci (fancybox vers 1.3.4):

$ ('body'). Append (... devient $ ('body> form'). Append (. ..

Et tout fonctionne :) presto

+0

Cela pourrait être la solution brillante que j'attendais :-) Cela a un sens absolu. Dommage que je ne puisse plus le tester depuis que j'ai abandonné fancybox à l'époque. Je suis sûr que je vais l'utiliser à nouveau dans le futur. – Peter

0

Hmm d'un coup d'œil rapide Je dirais que vous avez besoin de publier plus que l'attribut name. Ce serait probablement la raison pour laquelle votre backend ne sait pas quel texte est en cours (puisqu'il n'a pas été postback)