Fancybox – botão ASP.NET não funciona

Acabei de determinar usando o Firebug que, quando a janela do Fancybox é criada, ele realmente pega todos os meus controles ASP.NET (contidos na tag DIV) e os coloca fora da tag FORM. Então eu acho que esta é a razão pela qual o botão ASP.NET não faz nada – é colocado fora da forma.

Então, você tem alguma sugestão de como eu posso evitar isso (ou fazer com que o botão ASP.NET funcione), além de usar o modal dialog completamente diferente?

EDIT: OK, as pessoas estão relatando que algumas das correções propostas estão trabalhando para eles em determinadas versões. Portanto, leia todas as respostas / vá até o final de como corrigir esse problema em versões diferentes do Fancybox.

Você precisa mudar isso (algo em torno da linha 719 do jquery.fancybox-1.3.1.js):

$('body').append( tmp = $('
'), loading = $('
'), overlay = $('
'), wrap = $('
') );

para

 $('form').append( tmp = $('
'), loading = $('
'), overlay = $('
'), wrap = $('
') );

Para qualquer pessoa que precise de uma resposta simples para esse problema, usar a versão 2 do Fancybox é uma maneira muito mais fácil de fazê-lo. Tudo que você precisa fazer é adicionar pai: “form: first” no código, por exemplo

  $(document).ready(function () { $(".various").fancybox({ parent: "form:first", fitToView: true, width: '300px', height: '100px', autoSize: false, closeClick: false, openEffect: 'none', closeEffect: 'none', modal: false }); }); 

Em seguida, isso appendá os elementos fancybox no dom dentro da tag form, em vez de dentro da tag body.

Versão Fancybox 2.1.4

Mude estas duas linhas

Em torno da linha 2069:

 document.all && !document.querySelector ? $('html') : $('body'); 

para

 document.all && !document.querySelector ? $('html') : $('form:first'); 

e em torno da linha 1960:

 this.overlay = $('
').appendTo('body');

para

 this.overlay = $('
').prependTo('form');

Você também pode usar o appendTo, mas isso é com você. No meu caso eu precisava prefixar.

Eu tenho tentado descobrir esse problema toda a semana, eu realmente não tive sorte

Acabei de encontrar este artigo

http://usmanshabbir.blogspot.com/2010/10/click-server-button-problem-in-jquery.html

Isso explica como fazer o postback trabalhar com a checkbox de diálogo da IU do jQuery.

Se não é 100% necessário para usar checkbox de fantasia, então este método é definitivamente vale a pena tentar, ele me salvou um monte de problemas hoje.

Sem alterar a fonte do FancyBox, coloque isso depois do script do FancyBox (fora de todos os events de carga !!!):

    

Linha jquery.fancybox-1.3.4.js 1040

 //$('body').append( $('form').append( tmp = $('
'), loading = $('
'), overlay = $('
'), wrap = $('
') );

Obras (meu asp: Button faz postback) para mim no FF e IE9, obrigado pela solução

A atualização acima não funcionou para mim, o fancybox ainda foi adicionado fora do formulário. Eu então comentei aquelas 6 linhas no jquery.fancybox-1.3.2.js e descobri que elas não estavam sendo usadas no meu código.

Eu fiz uma pesquisa em ‘body’ nos arquivos js do fancybox e mudei para ‘form’ em:

jquery.fancybox-1.3.2.js (em 484)
jquery.fancybox-1.3.2.pack.js (em 27, em 41)

O fancybox agora está sendo adicionado ao formulário e os controles do servidor estão funcionando.

Versão do Fancybox: 2.1.2

Linha 1782 de jquery.fancybox.js

Mude isso:

 this.el = document.all && !document.querySelector ? $('html') : $('body'); 

Para isso:

 this.el = document.all && !document.querySelector ? $('html') : $('form:first'); 

Eu uso o Fancybox 1.3.4 para mostrar uma página aspx como uma página pop-up no iframe do fancybox. Mas o botão na página pop-up não causa postback. Eu não mudei nada como você disse antes. Em vez disso, fiz o seguinte.

  function check() { var validated = Page_ClientValidate(); if (validated) { __doPostBack('<%=bur.ClientID%>',''); parent.$.fancybox.close(); return true; } else { return false; } }  protected void bur_Click(object sender,Eventargs e) { //put breakpoint here. } 

O Fancybox 1.3.4 realmente faz o postback.

Mas se for fechado em OnClientClick que é antes do evento de clique do lado do servidor não será postback .So O acima é a solução para este problema. (Adicionando doPostBack na function javascript).

Normalmente, o Fancybox 1.3.4 faz o postback sem qualquer alteração em seus arquivos .Js. Mas para fechá-lo, precisa escrever essa linha ScriptManager.RegisterClientScriptBlock(this, GetType(), "", "parent.$.fancybox.close();", true); no evento de clique do lado do servidor. Só então o evento serverside é chamado e o fancybox também é fechado.

Mas o Fancybox 2.1.3 (mais recente) faz um evento de postback após ser fechado em OnClientClick.

Se atualizar o pai é uma solução que serve o propósito, você pode atualizar onClosed:

 $(".fancybox").fancybox({ 'onClosed': function() { parent.location.reload(true); } }); 

Sem qualquer alteração no arquivo da biblioteca fancybox js, o que funciona para mim foi abaixo,

 $('.your-selector').fancybox({ afterShow: function () { $('.fancybox-overlay').appendTo('form'); } }); 

Eu mudei o div fancybox dentro da tag form, e agora, o botão do lado do servidor está funcionando como um encanto 🙂 Tudo de bom .. Espero que isso funcione para você também. 🙂

Você não precisa alterar nenhum código ou biblioteca … Apenas tente isso …

 $('.fancybox').fancybox({ parent: "form:first", // jQuery selector }); 

Aqui está a pior solução possível, no entanto, funcionou para mim. Eu precisava do faceybox e codebehind ao mesmo tempo. Configure sua checkbox de fantasia para carregar quando o botão clicado. Em seguida, onClosed passar valores para outra página C # e fazer o código por trás no Page Load.

  

e então apenas a coisa "class =" aqui: