当将Link的OnClick代码设置为ModalPopupExtender的TargetControlID时,代码不会执行。

4
我进行了大量搜索,但仍无法解决这个问题。
我有一个 ModalPopupExtender 弹出窗口,希望用户点击一个链接 DoSomething 后弹出。该弹出窗口具有下拉控件,在用户请求打开对话框时需要通过后端代码动态填充。目前我正在尝试通过链接上的 OnClick 事件来实现,但一旦将链接绑定到 ModalPopupExtender 上,链接的 OnClick 代码就不会被执行。 代码片段:
<asp:LinkButton ID="lnkDoSomething" runat="server" onClick="lnkDoSomething_Click">Do Something</asp:LinkButton>
<asp:ModalPopupExtender ID="mpelnklnkDoSomething" runat="server" BackgroundCssClass="modalBackground"
    DropShadow="true" PopupControlID="lnkDoSomething"
    PopupDragHandleControlID="pnlDragHandlerForlnkDoSomething"   
    TargetControlID="lnklnkDoSomething"></asp:ModalPopupExtender>

问题在于一旦我将ModalPopupExtender设置为链接,OnClick代码就不会执行。显然这是设计如此,但对我来说(天真),如果用户点击链接,OnClick代码应该被执行。
你有什么想法,为什么不支持这种操作,正确的解决方案是什么?
1个回答

8
ModalPopupExtender 绑定到一个虚拟按钮上,并在后台代码中通过 LinkButtonOnClick 事件显示模态框: 标记:
<asp:LinkButton ID="lnkDoSomething" runat="server" onClick="lnkDoSomething_Click">Do Something</asp:LinkButton>
<asp:Button id="dummyButton" runat="server" style="display:none;" />

<asp:ModalPopupExtender ID="mpelnklnkDoSomething" runat="server" 
  BackgroundCssClass="modalBackground" DropShadow="true" PopupControlID="controlToPopUpId"
  PopupDragHandleControlID="pnlDragHandlerForlnkDoSomething" 
  TargetControlID="dummyButton"></asp:ModalPopupExtender>

后台代码:

  protected void lnkDoSomething_Click(Object sender, EventArgs e) 
  {
     //do work
     mpelnklnkDoSomething.Show();
  }

非常好,谢谢Rick,它有效。另外,你知道为什么我们需要连接到一个虚拟按钮吗?这似乎是一个解决方法,所以我想知道是否有核心ASP设计原因,为什么不允许在链接上使用它。 - Michael Hollywood
当您关联按钮/链接按钮时,ModalPopUpExtender接管客户端onclick事件以执行“弹出”。它返回false,取消实际的客户端单击事件。虚拟按钮确实是ASP.NET所需的,可能是它实现的一个接口,因此它可以通过ASP.NET页面生命周期连接事件。 - rick schott

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