代码之家  ›  专栏  ›  技术社区  ›  Mitchel Sellers

ASP.NET DataGrid和HoverMenu扩展程序

  •  1
  • Mitchel Sellers  · 技术社区  · 15 年前

    我有一个ASP.NET数据报,我正试图向其添加一个Hovermenu扩展程序。网格标记如下:

    <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;
        }
    }
    

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

    我错过了什么?

    1 回复  |  直到 15 年前
        1
  •  1
  •   TGnat    15 年前

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

    <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>