2

サーバー側からjQueryのthickboxを閉じる方法 - サーバーの行からthickbox(フレームスタイル)を閉じたい - アクションが行われたときなど.

シックボックスを使用してファイル アップロード ダイアログを表示します。アップロードが完了したら、サーバーのコード ビハインドからシックボックスを閉じたいと思います ('Close' または Esc キーの場合と同じように)。

また、Reponse.Redirect を実行すると、thickbox で開きます。全体を新しいページにリダイレクトするにはどうすればよいですか。

4

4 に答える 4

2

ケイ、知ってる?そのコメントへの返信を待つ気にさえなりません。

この問題に対する魔法の解決策はありません。コード スニペットでは十分ではありません。この質問は純粋に概念的なものであり、学ぶべき概念が残っています。

ここでのコンセプトは、Javascript とサーバー・サイドのコーディングをどのように連携させれば有利になるかということです。これらは 2 つの大きく異なる生き物であり、サーバー側からクライアント側のタスクを実行しても機能しません。

この問題にはさまざまなアプローチがあります。(詳細を何も提供していないため) フォームがシックボックスに送信されたら、シックボックスを閉じたいとしましょう。けっこうだ。私のアプローチは、close_this_thickbox()関数を作成し、それを .js ファイルに配置してから、フォームが送信されたら、結果のページを print にすること<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 を操作することはできません。この 2 つは互いに独立しています。サーバー上で何をしても、レンダリング済みの 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 を非表示にしてもう一方を表示するだけです。もう 1 つは、thickbox を閉じて親をリロードする続行ボタンを含みます。現在、これは最善の解決策ではありませんが、タスクの送信が成功したときにシックボックスの自動クローズをトリガーするコードを誰かが提供できることを願っています。

于 2009-06-26T19:34:34.557 に答える