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

如何让一个占位符中的链接在另一个占位符中打开ModalPopup?

  •  0
  • Wookai  · 技术社区  · 17 年前

    我有一个不同位置的页面。其中一个,我有一个链接,我想在第二个占位符中打开一个模式弹出窗口(使用Ajaxtoolkit ModalPopupExtender ):

    <asp:Content ID="content1" ContentPlaceHolderID="placeholder1" Runat="Server">
       <asp:LinkButton ID="link" runat="server" Text="Popup link" />
    </asp:Content>
    
    <asp:Content ID="content2" ContentPlaceHolderID="placeholder2" Runat="Server">
       <asp:Panel ID="panel" runat="server" Text="Popup content" />
       <ajaxToolkit:ModalPopupExtender ID="popup" runat="sever"
          TargetControlID="link"
          PopupControlID="panel"
          />
    </asp:Content>
    

    当我这样做的时候,它让我产生了一个例外,说 popup 不能发现 link (我理解,因为他们在两个不同的位置)。

    我怎样才能做到这一点?我能想到一些发现 FindControl 在后面的代码中,但是我不太喜欢使用这个函数,因为它的计算成本非常高(特别是对于我的嵌套布局)。

    1 回复  |  直到 17 年前
        1
  •  1
  •   Tommy    17 年前

    一个问题是,您的TargetControlID和PopupControlID是相反的。TargetControlID是要“模式弹出”的项的ID,在您的情况下,它是panel1。PopupControlID是将触发ModalPopup的控件的ID,在您的情况下,它是“链接”

    但是您仍然有一些选项,如果这不起作用,那么在使用下面的方法之前,我已经启动了位于不同更新面板中的模式。虽然不是完全相同的问题,但此解决方案可能会对您有所帮助(我假设您的页面上有一个脚本管理器)。

    1. 在content2中使用id=“hiddenlink”创建隐藏元素
    2. 设置您的ModalTender PopupControlID=“hiddenLink”
    3. 在Content1中“link”的codebehind中,添加一个onclick事件,其中包含以下内容

      modalpopup1.show()。

    4. 如果使用updatepanels,这将导致modalpoup以Ajax方式显示,而不进行页面刷新。但是您仍然可以在客户端和服务器之间得到完整的数据回发。

    方法2,您也可以使用一个javascript函数向modal显示。将behaviorid=“MyModal1”(或您想称之为的任何内容)添加到您的ModalPopup定义中。然后更改链接:

    <asp:LinkButton ID="link" runat="server" Text="Popup link" OnClientClick="$get('MyModal1').show(); return false;"/>
    

    注意:在上面的示例中,返回false会阻止.NET页执行回发。

    推荐文章