如何从服务器端关闭 jQuery 厚框 - 我想让厚框(框架样式)从服务器中的一行关闭 - 当一个动作完成时等。
我使用thickbox 来显示文件上传对话框,一旦上传完成,我想从服务器后面的代码中关闭thickbox(就像使用“关闭”或Esc 键一样)。
此外,当我执行 Reponse.Redirect 时,它会在厚框中打开,我如何将整个内容重定向到新页面。
如何从服务器端关闭 jQuery 厚框 - 我想让厚框(框架样式)从服务器中的一行关闭 - 当一个动作完成时等。
我使用thickbox 来显示文件上传对话框,一旦上传完成,我想从服务器后面的代码中关闭thickbox(就像使用“关闭”或Esc 键一样)。
此外,当我执行 Reponse.Redirect 时,它会在厚框中打开,我如何将整个内容重定向到新页面。
凯,你知道吗?我什至不会费心等待对该评论的回应。
这个问题没有神奇的解决方案。没有代码片段就足够了。这个问题纯粹是概念性的,你还有一个概念要学习。
这里的概念是如何使 Javascript 和服务器端编码协同工作以发挥您的优势。它们是两种截然不同的生物,从服务器端执行客户端任务将不起作用。
这个问题有很多不同的方法。假设(因为您没有提供任何细节)一旦在厚箱中提交了表单,您希望关闭厚箱。很公平。我的方法是创建一个close_this_thickbox()
函数,将它放在我的 .js 文件中,然后,一旦提交表单,就可以打印结果页面<script>close_this_thickbox()</script>
。
(对于最终用户来说,更简洁的解决方案可能是让表单通过 AJAX 提交,然后close_this_thickbox
作为回调,但这对于这里的讨论来说听起来有点太花哨了。)
与上述概念类似的方法是获得所需效果的唯一方法。您必须创建客户端代码,然后让服务器端打印对所述代码的调用。
至于应用于整个窗口的服务器端重定向,同样,如果没有相同的方法,这种情况就不会发生。除了使用内置的服务器端重定向方法外,您还必须调用一段脚本来产生您想要的效果,例如<script>top.location = 'http://example.com'</script>
. 没有服务器端解决方案是可能的。
希望您能成功应用此概念,并祝您在 Web 开发之旅中好运。有什么需要澄清的吗?
如果我理解你在问什么是正确的......
您不能从服务器端与 javascript 交互。两者相互独立。无论您在服务器上做什么,已经呈现的 javascript 都不会改变。你想'关闭'它以便在页面加载时关闭它吗?但是如果它已经加载了,你在服务器上做的任何事情都不会关闭它。
其次,如果您在带有asp的服务器上使用response.redirect,并且它被javascript调用,那么您只是在ajax请求中重定向内容。您必须从客户端重新加载才能更改当前脚本。
如果我假设不正确,请纠正我。
我打算发布一个类似的问题,然后找到了这个帖子,所以我想我会添加它。这是详细信息。
在我的母版页中,我得到了触发厚盒的以下链接
<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 并显示另一个。另一个包含关闭厚盒并重新加载父级的继续按钮。现在这不是最好的解决方案,但它希望有人可以提供一些代码,这些代码会在成功提交任务后触发自动关闭厚盒。
这是你需要的吗?
OnClick="self.parent.tb_remove();self.parent.location.href = 'Checkout.aspx';"
我想我正在做类似的事情。Checkout 按钮在厚框中,当点击 checkout 时,它会重定向到 Checkout.aspx