如何从服务器端关闭jQuery(iFrame)thickbox?

时间:2009-06-17 17:24:14

标签: asp.net jquery server-side thickbox

如何从服务器端关闭jQuery thickbox - 我想让胖盒(框架样式)从服务器中的一行关闭 - 当一个动作完成时等。

我使用thickbox显示文件上传对话框,一旦上传完成,我想从后面的服务器代码中解除厚箱(就像它关闭'Close'或Esc键一样)。

此外,当我执行Reponse.Redirect时,它会在厚箱中打开,如何将整个内容重定向到新页面。

4 个答案:

答案 0 :(得分:2)

凯,你知道吗?我甚至都不愿意等待对该评论做出回应。

这个问题没有神奇的解决办法。没有代码片段就足够了。这个问题纯粹是概念性的,你有一个可以学习的概念。

这里的概念是如何让Javascript和服务器端编码共同发挥作用。 他们是两个截然不同的生物,从服务器端执行客户端任务将无法正常工作。

这个问题有很多不同的方法。让我们说(因为您没有提供任何详细信息),一旦在厚箱中提交表单,您就希望关闭厚箱。很公平。我的方法是创建一个close_this_thickbox()函数,让它放在我的.js文件中,然后,一旦提交表单,就可以打印结果页面<script>close_this_thickbox()</script>

(最终用户的清洁解决方案可能是通过AJAX提交表单,然后将close_this_thickbox作为回调,但这听起来有点太花哨了。)

与上述概念类似的方法是 获得所需效果的唯一方法。您必须创建客户端代码,然后让服务器端打印所述代码的调用。

对于应用于整个窗口的服务器端重定向,再次,没有相同的方法就不会发生这种情况。您不必使用内置的服务器端重定向方法,而是必须调用一段脚本,从而产生您想要的效果,例如: <script>top.location = 'http://example.com'</script>。没有服务器端解决方案。

希望您能成功应用这一概念,并祝您在网络开发过程中一切顺利。有什么需要澄清的吗?

答案 1 :(得分:1)

如果我理解你正确要求的话......

您无法与服务器端的javascript交互。这两者是相互独立的。无论你在服务器上做什么,已经渲染的javascript都不会改变。你想“关闭”它,以便在页面加载时它被关闭吗?但如果它已经加载,你在服务器上做的任何事都不会关闭它。

其次,如果您在使用asp的服务器上使用response.redirect,并且它是由javascript调用的,那么您只需重定向ajax请求中的内容。您必须从客户端重新加载才能更改当前脚本。

如果我认为错误,请纠正我。

答案 2 :(得分:1)

我打算发布一个类似的问题,然后发现这个帖子,所以我想我添加它。以下是详细信息。

在我的母版页中,我得到了以下链接,触发了厚盒

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

这是我的login.aspx页面的HTML

<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>

我的login.aspx页面背后的代码如下

    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

因此,当用户成功验证时,我只需隐藏一个div并显示另一个div。另一个包含continue按钮,用于关闭thickbox并重新加载父级。现在这不是最好的解决方案,但有希望有人可以提供一些代码,这些代码会在成功提交任务时触发厚箱的自动关闭。

答案 3 :(得分:1)

这就是你需要的吗?

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

我认为我正在做类似的事情。 Checkout按钮位于厚箱中,点击结帐时它会重定向到Checkout.aspx