代码之家  ›  专栏  ›  技术社区  ›  Peter

如何在fancybox工作中获取UpdatePanel

  •  1
  • Peter  · 技术社区  · 14 年前

    我使用fancybox在单击链接时显示div的内容。此操作使用以下代码:

    <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中)它会更新文本框,并做我在代码隐藏中定义的任何事情。不幸的是,当我点击按钮时什么也没有发生。

    问题是,如果我删除fancybox,updatepanel将按预期工作。所以我想如果在创建fancybox之前我能找出按钮后面的eventhandler逻辑,那么在附加fancybox之后,我也许能重新创建eventhandler逻辑?我就是哪儿也找不到。。。

    我正在使用ASP.Net WebForms 3.5和JQuery 1.4.1

    我用下面的代码覆盖了按钮上的clientside click事件,从而触发了codeboond按钮点击事件。关键在于使用按钮的名称作为“doPostBack”事件的发送者对象。剩下的唯一问题是,所有其他值都不再回发。如果我在文本框中键入任何内容,单击该按钮,我的代码隐藏将不再知道文本框中的内容。

    $("#popupTrigger").fancybox({
        //.... other options,
        onComplete: function () {
            $("#RefreshContentButton").click(function () {
                __doPostBack($(this).attr('name'), '');
            });
        }
    });
    
    2 回复  |  直到 14 年前
        1
  •  6
  •   Rune    13 年前

    问题出在fancybox内部。当窗体显示控件时,它实际上会将控件放置在窗体外部。你需要做的是像这样修改你的fancybox插件(fancybox vers)。1.3.4条):

    $(“body”).append(。。。变成$('body>form')。追加(。。。

    一切都正常了:)

        2
  •  0
  •   Phil    14 年前

    嗯,快速浏览一下,我想你需要回发的不仅仅是name属性。这可能是后端不知道当前文本的原因(因为它没有被回发)