Я использую 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'), '');
});
}
});