ASP.NET DataGrid и HoverMenu Extender - PullRequest
1 голос
/ 18 мая 2009

У меня есть 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 я устанавливаю идентификатор, чтобы он работал для всей строки, для этого я использую следующее:

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

Как таковое, меню отображается, однако нажатие на кнопки ссылки фактически никогда не отправляет обратно на сервер, позволяя обрабатывать команду элемента. Если я отключу расширение меню при наведении, кнопки будут работать должным образом.

Чего мне не хватает?

1 Ответ

1 голос
/ 18 мая 2009

Вместо того, чтобы пытаться реализовать поведение в коде, я вставил ссылки ...

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

...