代码之家  ›  专栏  ›  技术社区  ›  mare

通过常规浏览器请求和Ajax请求呈现的视图中的ASP.NET MVC javascript用户控件

  •  0
  • mare  · 技术社区  · 15 年前

    我的一些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请求呈现/构建那些视图用户控件。例如,我将向/widget/rendertostring/发出请求。使用jquery.ajax()方法,它将返回该控件的HTML代码。这样做很好,代码也很好。然后,我将把结果插入(附加)到一个页面中的一个DIV中,在该页面中发出Ajax请求。这也很好,返回的HTML将被附加。唯一的问题是-shadowbox没有连接。即使它的代码被呈现。

    似乎每次都需要重新加载页面(F5)才能连接阴影框。由于我正在执行Ajax获取和即时附加,以避免不得不进行服务器往返,所以我还希望shadowbox在不刷新的情况下连接起来。

    有人能帮我吗?谢谢你

    更新:

    是的,我的网站上有这个。校长:

    <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调用后再次初始化阴影框?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Hogan    15 年前

    有很多影子盒子插件…你用的是哪一个?(没有它我不能给你确切的代码。)无论如何,我想你的 $(document).ready(function () { ... }); 这就告诉影子盒子普朗金要把自己绑起来。在Ajax调用之后,您需要再次调用它。

        2
  •  0
  •   mare    15 年前

    刚刚找到解决方案 here

    // 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", {});