0

私のASCXファイルのいくつかにこのコードがあります:

<%=Html.ActionLink(Resources.Localize.Routes_WidgetsEdit, "Edit", "Widget", 
new { contentType = Model.ContentType, widgetSlug = Model.Slug, modal=true},
new
{
  rel = "shadowbox;height=600;width=700",
  title = Resources.Localize.Routes_WidgetsEdit,
  @class = "editWidget"
})%>

その rel="shadowbox..." に注意してください。これは、この ActionLink の ShadowBox Lightbox クローンを配線するためのものです。

これは、ユーザーが通常のブラウザー リクエストを介してこのユーザー コントロールを含むページをリクエストしたときに正常に機能します。しかし、AJAX リクエストを介してこれらの View User コントロールもレンダリング/ビルドします。たとえば、jQuery .ajax() メソッドを使用して /Widget/RenderToString/... にリクエストすると、そのコントロールの HTML コードが返されます。これは正常に機能し、コードを正常にレンダリングします。次に、AJAX 要求が行われたページの DIV に結果を挿入 (追加) します。これも問題なく動作し、返された HTML が追加されます。唯一の問題は、ShadowBox が配線されていないことです。そのコードはレンダリングされますが。

ShadowBox を接続するたびにページのリロード (F5) が必要なようです。私はAJAX GETとインスタントアペンドを実行してサーバーのラウンドトリップを行わなくて済むようにしているので、リフレッシュを行わずにShadowBoxを配線することも必要です。

誰かがそれを手伝ってくれますか?ありがとうございました

アップデート:

はい、Site.Master ヘッドにこれがあります:

<script src="<%=Url.Content("~/Scripts/shadowbox-build-3.0rc1/shadowbox.js") %>" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function() {
        // insert functions calls here that provide some default behaviour
        externalLinks();
    });

    Shadowbox.init({
        language: "en",
        players: ["img", "html", "iframe"],
        onClose: function() { location.reload(true) }
    });
</script>

AJAX 呼び出し後に Shadowbox を再度初期化するにはどうすればよいですか?

4

2 に答える 2

1

シャドーボックスのプラグインはたくさんありますが、どれを使っていますか? $(document).ready(function () { ... });(それなしでは正確なコードを提供することはできません。) いずれにせよ、シャドウボックスプランジンにそれ自体をバインドするように指示する何かがあると思います。AJAX 呼び出しの後にもう一度呼び出す必要があります。

于 2010-02-18T01:13:33.550 に答える
0

ここで解決策を見つけました

// call this after adding the new HTML to the page
// set up all anchor elements with a "editWidget" class to work with Shadowbox
Shadowbox.setup("a.editWidget", {});
于 2010-02-18T10:38:22.950 に答える