Как закрыть толстое окно jQuery (iFrame) со стороны сервера?

StackOverflow https://stackoverflow.com/questions/1008464

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

это то, что тебе нужно?

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

я думаю, что делаю что-то подобное. кнопка Checkout находится в толстом ящике, при нажатии кнопки checkout она перенаправляется на Checkout.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top