2010-10-25 69 views
1

我使用fancybox在單擊鏈接時顯示div的內容。這個工程使用下面的代碼:如何讓fancybox內的UpdatePanel工作

<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> 

和JScript的:

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

現在我很期待它會做的是,當你點擊按鈕(這是內部的fancybox顯示),它會更新文本框,並執行我定義它在代碼隱藏中執行的操作。不幸的是,當我點擊按鈕時沒有任何反應

我試着自己觸發__doPostback傳遞updatepanel的ClientID和/或按鈕本身。然而,我似乎無法在代碼隱藏中觸發事件。

事情是,如果我刪除fancybox,updatepanel按預期工作。所以我猜測,如果我能夠在創建fancybox之前找出按鈕後面的事件處理邏輯,我可以在連接fancybox後重新創建事件處理器邏輯?我找不到它的任何地方...

我使用ASP.Net Web窗體3.5和JQuery 1.4.1

更新

我把它通過覆蓋觸發代碼隱藏button_click事件客戶端使用下面的代碼點擊按鈕上的事件。關鍵在於使用按鈕的名稱作爲__doPostBack事件的發件人對象。唯一存在的問題是所有其他值都不會被重新發布。如果我在文本框中鍵入任何內容,請單擊該按鈕,我的代碼隱藏不再知道文本框中的內容。

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

我已經放棄了努力。我會離開這個問題,以防萬一開有人會想出一個絕妙的解決方案。我抽不出更多的時間來調查。 – Peter 2010-10-28 12:54:13

回答

6

問題出在fancybox之內。它實際上將您的控件放置在表單顯示之外。你需要做的就是像這樣修改你的fancybox插件(fancybox版本1.3.4):

$('body')。append(...變成$('body> form')。append(。 ..

而且急一切工作:)

+0

這可能是我等待的精彩解決方案:-)它絕對有意義。太糟糕了,我不能再測試它了,因爲那時我放棄了fancybox。我相信我會在未來再次使用它。 – Peter 2011-03-18 08:16:53

0

嗯,快速瀏覽我會說你需要回發的不僅僅是名稱屬性。這可能是爲什麼你的後端不知道什麼文本是最新的(因爲它沒有被回發)