2010-10-25 72 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

嗯,快速浏览我会说你需要回发的不仅仅是名称属性。这可能是为什么你的后端不知道什么文本是最新的(因为它没有被回发)