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 没有连接。即使它的代码被渲染。

似乎每次都需要重新加载页面 (F5) 才能连接 ShadowBox。由于我正在执行 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

有很多 shadowbox 插件……你用的是哪一个?(没有它我不能给你确切的代码。)无论如何,我想你有一些东西$(document).ready(function () { ... });告诉 shadowbox plungin 绑定自己。您需要在 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 回答