如何从服务器端关闭jQuery thickbox - 我想让胖盒(框架样式)从服务器中的一行关闭 - 当一个动作完成时等。
我使用thickbox显示文件上传对话框,一旦上传完成,我想从后面的服务器代码中解除厚箱(就像它关闭'Close'或Esc键一样)。
此外,当我执行Reponse.Redirect时,它会在厚箱中打开,如何将整个内容重定向到新页面。
答案 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