Как заставить UpdatePanel работать внутри fancybox - PullRequest
1 голос
/ 25 октября 2010

Я использую 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), она обновит текстовое поле и сделает все, что я определил, чтобы сделать его в коде. К сожалению, ничего не происходит, когда я нажимаю кнопку.

Я попытался сам вызвать __doPostback, передав ClientID панели обновлений и / или саму кнопку. Однако я не могу вызвать событие в коде позади.

Дело в том, что если я удалю fancybox, панель обновлений будет работать как положено. Поэтому я предполагаю, что если я смогу каким-то образом выяснить, какая логика обработчика событий находится за кнопкой до создания fancybox, я смогу воссоздать логику обработчика событий после подключения fancybox? Я просто нигде не могу его найти ...

Я использую ASP.Net WebForms 3.5 и JQuery 1.4.1

Обновление

Я получил его, чтобы вызвать событие codebehind button_click, переопределив событие click на стороне клиента на кнопке, используя приведенный ниже код. Ключ заключается в использовании имени кнопки в качестве объекта отправителя для события __doPostBack. Единственная проблема, которая остается, состоит в том, что все другие значения больше не публикуются. Если я что-то наберу в текстовом поле, нажмите кнопку, мой код больше не будет знать, что находится в текстовом поле.

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

Ответы [ 2 ]

6 голосов
/ 18 марта 2011

Проблема заключается в fancybox. Он фактически помещает ваши элементы управления за пределы формы, когда отображает их. Что вам нужно сделать, это изменить ваш плагин fancybox, как это (fancybox версии 1.3.4):

$ ('body'). Append (... становится $ ('body> form'). Append (...

И престо все работает:)

0 голосов
/ 25 октября 2010

Хм, на первый взгляд, я бы сказал, что вам нужно отправить больше, чем просто атрибут имени.Это может быть причиной того, что ваш бэкэнд не знает, какой текст является текущим (так как он не был постбэк)

...