2010-10-25 1 views
1

Я использую fancybox для отображения содержимого div при нажатии ссылки. Это работает, используя код ниже:Как получить UpdatePanel внутри fancybox working

<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

Update

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

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

Я отказался пробовать. Я оставляю этот вопрос открытым только в случае, если кто-то может придумать блестящее решение. Я не могу уделять больше времени, чтобы исследовать – Peter

ответ

6

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

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

И вуаля все работает :)

+0

Это может быть блестящее решение, которого я ждал :-) Это абсолютный смысл. Жаль, что я не могу это проверить, так как в то время я отказался от fancybox. Я уверен, что буду использовать его снова в будущем. – Peter

0

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