1

我有一个 ASP.NET DataGrid,我正在尝试向其中添加 HoverMenu Extender。网格标记如下:

<asp:datagrid id="dgrExisting" runat="server" autogeneratecolumns="false" cssclass="FormattedTable" onitemcommand="dgrExisting_ItemCommand" onitemdatabound="dgrExisting_ItemDataBound">
                <headerstyle cssclass="FormattedTableHeader">
                <alternatingitemstyle cssclass="FormattedTableAltRow"></alternatingitemstyle>
                <columns>
                    <asp:boundcolumn datafield="UrlId" visible="false"></asp:boundcolumn>
                    <asp:boundcolumn datafield="MonitorUrl" headertext="Url"></asp:boundcolumn>
                    <asp:boundcolumn datafield="LastChecked" headertext="Last Checked"></asp:boundcolumn>
                    <asp:boundcolumn datafield="NextCheck" headertext="Next Check" visible="false"></asp:boundcolumn>
                    <asp:boundcolumn datafield="LastLoadTime" headertext="Last Load Time&lt;br&gt;&lt;/asp&gt;(Milliseconds)">
                    <asp:boundcolumn datafield="LastStatus" headertext="Last Status"></asp:boundcolumn>
                    <asp:templatecolumn>
                        <itemtemplate>
                            <asp:panel id="pnlPopupMenu" runat="server">
                                <div style="border: 1px outset white; padding: 2px;">
                                    <div><asp:linkbutton id="lnkReport" runat="server" commandname="Report" text="View Reports"></asp:linkbutton></div>
                                    <div><asp:linkbutton id="lnkDelete" runat="server" commandname="Delete" text="Delete"></asp:linkbutton></div>
                                    <asp:confirmbuttonextender id="cbeNewDelete" runat="server" targetcontrolid="lnkDelete" confirmtext="Are you sure you want to remove this URL?"></asp:confirmbuttonextender>
                                </div>
                            </asp:panel>
                            <asp:hovermenuextender id="hoverMenu" runat="server" popupcontrolid="pnlPopupMenu" popupposition="Right" hovercssclass="popupHover" targetcontrolid="pnlPopupMenu" popdelay="50"></asp:hovermenuextender>
                        </itemtemplate>
                    </asp:templatecolumn>
                </asp:boundcolumn>
            </columns>
</asp:datagrid>

在 ItemDataBound 事件中,我将 ID 设置为允许它为整行工作,为此我使用以下内容:

protected void dgrExisting_ItemDataBound(object sender, DataGridItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        AjaxControlToolkit.HoverMenuExtender oHoverMenu = (AjaxControlToolkit.HoverMenuExtender)e.Item.FindControl("hoverMenu");
        e.Item.ID = e.Item.ItemIndex.ToString();
        oHoverMenu.TargetControlID = e.Item.ID;
    }
}

然而,菜单显示,但是,单击链接按钮实际上不会回传到服务器,从而允许处理项目命令。如果我禁用悬停菜单扩展器,按钮会按预期工作。

我错过了什么?

4

1 回答 1

1

我没有尝试在后面的代码中实现行为,而是内联了链接......

<itemtemplate>
    <asp:label id="lblOptions" runat="server">Options</asp:label><img src="../Images/RightArrow.png" alt="Show Menu" />

    <asp:panel id="pnlMenu" runat="server" cssclass="popupMenu">
        <div class="popupItem"><a href="Uploader.aspx?Action=Copy&Id=<%#Eval("Id")%>">Copy</a></div>
        <div class="popupItem"><a href="Uploader.aspx?Action=Version&Id=<%#Eval("VersionId")%>">Upload New Version</a></div>
        <div class="popupItem"><a href="VersionBrowser.aspx?id=<%#Eval("Id")%>">View Versions</a></div>
    </asp:panel>

    <cc1:hovermenuextender id="hme" runat="server"
         hovercssclass="popupHover"
         popupcontrolid="pnlMenu"
         targetcontrolid="lblOptions"/>
</itemtemplate>

于 2009-05-18T16:00:44.393 回答