如何在GridView中的控件中设置ModalPopupExtender的TargetControlID

7
我该如何将位于GridView内部的HyperLinkTragetContriID设置好呢?
我尝试了以下代码:
<asp:ModalPopupExtender ID="ModalPopupExtender1" runat="server"
                        PopupControlID="Panel1" 
                        CancelControlID="btnCancel" 
                        OnCancelScript="HideModalPopup()"
                        TargetControlID="GridView1$HyperLink1">
</asp:ModalPopupExtender>

但是我遇到了一个错误:没有GridView1$HyperLink1
1个回答

8

ModalPopupExtenderTargetControlID设置为基本上会在单击控件时触发该ModalPopup的客户端Show函数。因此,您需要自己连接控件。

首先,由于ModalPopupExtender需要一个TargetControlID,因此您应添加一个虚拟控件以将模态弹出窗口链接到:

<asp:Button runat="server" 
            ID="HiddenTargetControlForModalPopup" 
            style="display:none"/> 

同时将 ModalPopupExtenderTargetControlID 与其链接

<asp:ModalPopupExtender ID="ModalPopupExtender1" runat="server"
                        PopupControlID="Panel1" 
                        CancelControlID="btnCancel" 
                        OnCancelScript="HideModalPopup()"  
                        TargetControlID="HiddenTargetControlForModalPopup">
</asp:ModalPopupExtender>

因此,ModalPopupExtender现在有一个不起作用的目标。现在我们需要完成目标的工作。您需要一个JavaScript函数来从客户端显示ModalPopup。

<script type="text/javascript">
     var ModalPopup='<%= ModalPopupExtender1.ClientID %>';

     function ShowModalPopup() {
         //  show the Popup     
         $find(ModalPopup).show();
     }
</script>   

然后您应该将gridview中控件的OnClientClick事件映射到此JavaScript函数。从您的代码中,我看到您使用了一个asp:HyperLink,我不认为它支持OnClientClick事件,因此您可能需要将其切换为asp:LinkButton

<asp:LinkButton ID="LinkButton1" runat="server" 
                OnClientClick="ShowModalPopup()" />

嗨,我正在使用你的代码,但是出现了一个错误.. Microsoft JScript 运行时错误:Sys.ArgumentNullException: 值不能为空。参数名:handler。 - software
对我来说运行良好,是经过充分测试的解决方案。你的错误可能出现在其他地方。尝试调试以查看错误发生的位置。 - DavRob60
1
@software 如果这对您有帮助,欢迎在问题和答案上给个赞。 - DavRob60
如果您在单击按钮时收到回发,则说明您做错了什么。您可以尝试在隔离页面中进行测试。 - DavRob60
1
@DavRob60 看起来将GridView放在UpdatePanel中,但将弹出窗口保持在其外部可以解决问题。 - ebooyens
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接