2

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

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

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

4

4 回答 4

2

凯,你知道吗?我什至不会费心等待对该评论的回应。

这个问题没有神奇的解决方案。没有代码片段就足够了。这个问题纯粹是概念性的,你还有一个概念要学习。

这里的概念是如何使 Javascript 和服务器端编码协同工作以发挥您的优势。它们是两种截然不同的生物,从服务器端执行客户端任务将不起作用。

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

(对于最终用户来说,更简洁的解决方案可能是让表单通过 AJAX 提交,然后close_this_thickbox作为回调,但这对于这里的讨论来说听起来有点太花哨了。)

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

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

希望您能成功应用此概念,并祝您在 Web 开发之旅中好运。有什么需要澄清的吗?

于 2009-06-17T17:57:38.900 回答
1

如果我理解你在问什么是正确的......

您不能从服务器端与 javascript 交互。两者相互独立。无论您在服务器上做什么,已经呈现的 javascript 都不会改变。你想'关闭'它以便在页面加载时关闭它吗?但是如果它已经加载了,你在服务器上做的任何事情都不会关闭它。

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

如果我假设不正确,请纠正我。

于 2009-06-17T17:49:53.250 回答
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 并显示另一个。另一个包含关闭厚盒并重新加载父级的继续按钮。现在这不是最好的解决方案,但它希望有人可以提供一些代码,这些代码会在成功提交任务后触发自动关闭厚盒。

于 2009-06-26T19:34:34.557 回答
1

这是你需要的吗?

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

我想我正在做类似的事情。Checkout 按钮在厚框中,当点击 checkout 时,它会重定向到 Checkout.aspx

于 2010-01-27T19:26:13.117 回答