Как закрыть jQuery (iFrame) Thickbox со стороны сервера? - PullRequest
2 голосов
/ 17 июня 2009

Как закрыть jQuery Thickbox со стороны сервера - я хочу, чтобы Thickbox (стиль рамки) был закрыт из строки на сервере - когда действие выполнено и т. Д.

Я использую Thickbox, чтобы показать диалоговое окно загрузки файла, и как только загрузка будет завершена, я хочу отклонить Thickbox из кода сервера (как это было бы с клавишей «Закрыть» или Esc).

Кроме того, когда я делаю Reponse.Redirect, он открывается в толстой коробке, как я могу перенаправить всю вещь на новую страницу.

Ответы [ 4 ]

2 голосов
/ 17 июня 2009

Кей, знаешь что? Я даже не буду ждать ответа на этот комментарий.

Нет волшебного решения этой проблемы. Фрагмента кода не будет достаточно. Этот вопрос носит чисто концептуальный характер, и вам осталось изучить его.

Идея заключается в том, чтобы заставить Javascript и серверное кодирование работать вместе в ваших интересах. Это два совершенно разных существа, и выполнение клиентских задач со стороны сервера НЕ РАБОТАЕТ.

Есть много разных подходов к этой проблеме. Предположим, что (поскольку вы не указали никаких подробностей), когда форма будет отправлена ​​в толстый ящик, вы хотите закрыть толстый ящик. Справедливо. Мой подход заключается в том, чтобы создать функцию close_this_thickbox(), поместить ее в мой файл .js, а затем, после отправки формы, распечатать получившуюся страницу <script>close_this_thickbox()</script>.

(Более чистое решение для конечного пользователя, вероятно, заключалось бы в том, чтобы форма отправлялась через AJAX, а затем close_this_thickbox в качестве обратного вызова, но для этого обсуждения это звучит несколько странно.)

Подход, аналогичный по концепции вышеописанному, - это единственный способ получить желаемый эффект. Вы должны создать код на стороне клиента, а затем на стороне сервера распечатать вызов указанного кода.

Что касается перенаправления на стороне сервера, применяемого ко всему окну, опять же, такое не может произойти без такого же подхода. Вместо того чтобы использовать встроенные методы перенаправления на стороне сервера, вы должны вызвать фрагмент сценария, который даст желаемый эффект, например, <script>top.location = 'http://example.com'</script>. Решение на стороне сервера невозможно.

Здесь мы надеемся, что вы сможете успешно применить эту концепцию и удачи в вашем путешествии по веб-разработке. Что-нибудь нужно уточнить?

1 голос
/ 27 января 2010

это то, что вам нужно?

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

Я думаю, что делаю что-то подобное. кнопка «Оформить заказ» находится в толстой коробке, при нажатии кнопки «Оформить заказ» она перенаправляется в Checkout.aspx

1 голос
/ 26 июня 2009

Я собирался опубликовать аналогичный вопрос, затем нашел эту тему, поэтому я решил добавить к нему. Вот подробности.

На моей главной странице я получил следующую ссылку, которая запускает Thickbox

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

Это HTML для моей страницы 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>

и код моей страницы 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 и показываю другой. Другой содержит кнопку продолжения, которая закрывает Thickbox и перезагружает родителя. Сейчас это не лучшее решение, но оно работает, надеюсь, кто-то может предоставить какой-то код, который будет запускать автоматическое закрытие карты памяти при успешной отправке задачи.

1 голос
/ 17 июня 2009

Если я правильно понимаю, что вы спрашиваете правильно ...

Вы не можете взаимодействовать с javascript со стороны сервера. Эти два независимы друг от друга. Независимо от того, что вы делаете на сервере, javascript, который уже отображается, не изменится. Вы хотите «закрыть» его, чтобы при загрузке страницы он закрывался? Но если он уже загружен, ничего, что вы делаете на сервере, не закроет его.

Во-вторых, если вы используете response.redirect на сервере с asp и он вызывается с помощью javascript, вы просто перенаправляете содержимое внутри запроса ajax. Вы должны перезагрузить со стороны клиента, чтобы изменить текущий скрипт.

Пожалуйста, поправьте меня, если я предположил неправильно.

...