没有使用母版页的动态模态弹出窗口的目标

时间:2010-06-25 00:14:06

标签: asp.net modalpopupextender

我动态添加的模态弹出扩展程序无法找到目标控件ID。我正在使用母版页。

编辑:没有MasterPages,效果很好。

网络表单:

<asp:Content ID="Content3" ContentPlaceHolderID="cphContent" runat="server">
    <a runat="server" href="javascript:void(0);" ID="btnVote">vote</a>
    <asp:Panel ID="popScore" runat="server"></asp:Panel>
</asp:Content>

代码隐藏

protected void Page_Load(object sender, EventArgs e)
{
    ModalPopupExtender mpeScore = new ModalPopupExtender()
    {
        ID = "mpeSc",
        PopupControlID = popScore.ClientID,
        TargetControlID = btnVote.ClientID,
        BackgroundCssClass = "modalBackground",
        BehaviorID = "mpeScore"
    };
    this.Controls.Add(mpeScore);
}

错误讯息是

  

'mpeSc'的TargetControlID不是   有效。带ID的控件   'ctl00_cphContent_btnVote'不能   被发现。

我也试过了btnVote.ID

1 个答案:

答案 0 :(得分:0)

花了我几天时间来解决这个问题,但是在使用母版页或单独的UpdatePanels时你必须挂钩ResolveControlID事件

ModalPopupExtender mpeScore = new ModalPopupExtender()
{
    ID = "mpeSc",
    PopupControlID = popScore.ClientID,
    CancelControlID = cancelVote.ClientID,
    TargetControlID = btnVote.ID,   //will note resolve, done in exception
    BackgroundCssClass = "modalBackground",
    BehaviorID = "mpeScore"
};
mpeScore.ResolveControlID += mpe_ResolveControlID;
this.Form.Controls.Add(mpeScore);

您可以对所有模态弹出窗口使用相同的处理程序,并像这样解析控件

protected void mpe_ResolveControlID(object sender, AjaxControlToolkit.ResolveControlEventArgs e)
{
    switch (e.ControlID)
    {
        case "btnVote":
            e.Control = btnVote;
            break;
        case "btnComDummy":
            e.Control = btnComDummy;
            break;
    }
}

很高兴我可以帮助(我)。