2012-04-18 63 views
4

我做了大量搜索,無法弄清楚。設置爲ModalPopupExtender後,鏈接的OnClick代碼不會執行TargetControlID

我有一個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代碼的鏈接。

任何想法爲什麼這不被支持和正確的解決方案是什麼?

回答

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(); 
    } 
+0

非常好,謝謝瑞克它的工作原理。在相關說明中,您是否知道我們需要附加到虛擬按鈕上的「爲什麼」?這似乎基本上是一個解決方案,所以我想知道是否有一個核心的ASP設計原因,爲什麼不允許它在鏈接上 – 2012-04-18 19:59:48

+0

當你關聯按鈕/ linkbutton,ModalPopUpExtender接管客戶端onclick事件來做「彈出」。它返回false取消實際的客戶端點擊事件。虛擬按鈕是ASP.NET真正需要的,可能是它實現的接口,所以它可以通過ASP.NET頁面生命週期連接事件。 – 2012-04-18 20:03:38

+0

謝謝rick_schott。 – ZahidKakar 2013-12-16 14:19:38