Pergunta

Como fechar thickbox jQuery do lado do servidor - Eu quero fazer com que o thickbox (estilo quadro) para ser fechado a partir de uma linha no servidor -. Quando uma ação é feito etc

Eu uso o thickbox para mostrar um diálogo de upload de arquivos, e uma vez que o upload estiver completo, eu quero descartar a thickbox a partir do código do servidor por trás (da mesma forma que faria com o 'Fechar' ou a tecla Esc).

Além disso, quando eu faço Reponse.Redirect abre no thickbox, como eu pode redirecionar a coisa toda para uma nova página.

Foi útil?

Solução

Eu estava indo para postar uma pergunta semelhante, em seguida, encontrou esta discussão, então eu percebi que eu adicionar a ele. Aqui estão os detalhes.

na minha página mestra eu tenho o seguinte ligação que desencadeia a thickbox

<a runat="server" href="~/users/login.aspx?TB_iframe=true&height=160&width=260" class="thickbox">login</a>

Este é o HTML para minha página login.aspx

<div runat="server" id="divAuthenticate" style="margin: 0px 10px 0px 10px;">
  <div class="row">
  <asp:label runat="server" associatedcontrolid="txtUserEmailAddress" text="Email Address"/>
  <asp:textbox runat="server" id="txtUserEmailAddress" cssclass="defaultTxt" width="260px" />
  </div>
  <div class="row">
  <asp:label runat="server" associatedcontrolid="txtUserPassword" text="Password" />
  <asp:textbox runat="server" id="txtUserPassword" cssclass="defaultTxt" width="260px" />
  </div>
  <div class="row">
  <asp:label id="lblMsg" runat="server" forecolor="Red" />
  </div>
  <div class="row" style="text-align:right;">
  <asp:button runat="server" id="cmdLogin" cssclass="button" text="login" />
  </div>
</div>

  <div id="divContinue" style="margin: 40px;" runat="server" visible="false">
  <asp:button runat="server" id="cmdContinue" cssclass="button" text="Continue..." onclientclick="self.parent.tb_remove();self.parent.location.reload(true);"  />
  </div>

eo trás código para minha página login.aspx é a seguinte

    Protected Sub cmdLogin_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmdLogin.Click

    If users.authenticate(txtUserEmailAddress.Text, txtUserPassword.Text) = sqlHelpers.userCommand.success Then

        'store the username so that next time around we can load it to the username textbox
        Dim cookie As New HttpCookie("username")
        cookie.Values.Add("userName", txtUserEmailAddress.Text)
        cookie.Expires = DateTime.Now.AddDays(5)
        Response.Cookies.Add(cookie)

        FormsAuthentication.SetAuthCookie(txtUserEmailAddress.Text, True)

        divAuthenticate.Visible = False
        divContinue.Visible = True

    Else
        lblMsg.Text = "invalid username or password!"

    End If
End Sub

Assim, quando os autentica usuários com sucesso i simplesmente esconder um div e mostrar o outro. A outra contendo o botão que fecha o thickbox e recarrega o pai continuar. Agora, isso não é a melhor solução, mas funciona espero que alguém pode fornecer algum código que provocaria o fechamento automático do thickbox mediante a apresentação tarefa bem sucedida.

Outras dicas

Kay, você sabe o quê? Eu não sou mesmo vou incomodar esperando uma resposta sobre esse comentário.

Não há uma solução mágica para este problema. No trecho de código será suficiente. Esta questão é puramente conceitual, e você tem um conceito deixou de aprender.

O conceito aqui é como fazer Javascript e server-side codificação trabalham juntos para a sua vantagem. Eles são duas criaturas muito diferentes, e executar tarefas do lado do cliente do lado do servidor não vai funcionar.

Existem muitas abordagens diferentes para esta questão. Digamos que (desde que você não deu detalhes qualquer) que uma vez que um formulário é submetido no thickbox, que deseja fechar o thickbox. Justo. Minha abordagem seria criar uma função close_this_thickbox(), tê-lo em torno de mentir na minha js arquivo, em seguida, uma vez que o formulário é enviado, para ter a <script>close_this_thickbox()</script> imprimir a página resultante.

(A solução mais limpa para o usuário final seria provavelmente para ter o formulário de envio via AJAX, então tem close_this_thickbox como um callback, mas que soa um pouco também sofisticados para essa discussão aqui.)

Uma abordagem semelhante em conceito para o acima é o única maneira de obter o efeito desejado. Você deve criar o código do lado do cliente, em seguida, ter o lado do servidor imprimir uma invocação do referido código.

Como para o redirecionamento do lado do servidor com efeitos em toda a janela, mais uma vez, tal pode não ocorrer sem a mesma abordagem. Em vez de usar a sua built-in métodos de redirecionamento do lado do servidor, você deve invocar um pedaço de script que resulta no efeito desejado, por exemplo, <script>top.location = 'http://example.com'</script>. Nenhuma solução do lado do servidor é possível.

Aqui está esperando que você pode aplicar com êxito este conceito, e boa sorte na sua jornada de desenvolvimento web. Precisa de alguma coisa esclarecimento?

Se eu entendo o que você está pedindo corretamente ...

Você não pode interagir com o javascript do lado do servidor. Os dois são independentes uns dos outros. Não importa o que você faz no servidor, javascript que já é prestado não vai mudar. Você quer 'fechar' com que quando a página é carregada é fechada? Mas se já tiver carregado, nada que fazer no servidor irá fechá-lo.

Em segundo lugar, se você estiver usando response.redirect no servidor com asp, e está sendo chamado por javascript, você está simplesmente redirecionando o conteúdo dentro da solicitação ajax. Você tem que recarregar a partir do lado do cliente para mudar o script atual.

Por favor me corrija se eu assumi incorretamente.

é isso que você precisa?

OnClick="self.parent.tb_remove();self.parent.location.href = 'Checkout.aspx';"

Eu acho que estou fazendo algo similar. o botão Caixa está no thickbox, quando check-out clicado ele redireciona para Checkout.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top