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

没有带母版页的动态模式弹出窗口的目标

  •  0
  • Laramie  · 技术社区  · 14 年前

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

    编辑: 没有母版页,它工作得很好。

    Web窗体:

    <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“u btnvote”无法 被发现。

    我试过 btnVote.ID 也。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Laramie    14 年前

    我花了几天时间才弄明白,但是在使用母版页或单独的更新面板时,必须挂接到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;
        }
    }
    

    很高兴我能帮助(我)。