Asp.net 悬停时动态填充AJAX悬停菜单

Asp.net 悬停时动态填充AJAX悬停菜单,asp.net,ajax,vb.net,user-controls,dynamically-generated,Asp.net,Ajax,Vb.net,User Controls,Dynamically Generated,我需要能够在鼠标悬停在鼠标悬停菜单上时填充鼠标悬停菜单,而不是在加载页面时填充鼠标悬停菜单数据的整个gridview。换句话说,我需要“动态”填充它们 我将弹出窗口的内容与示例文本一起放在Web用户控件中。因此,当鼠标悬停在GridView行上时,我需要填充此用户控件 以下是.aspx页面: <asp:Panel ID="PopupPanel" runat="server" CssClass="modal" style="display: none;"> <g3:Ord

我需要能够在鼠标悬停在鼠标悬停菜单上时填充鼠标悬停菜单,而不是在加载页面时填充鼠标悬停菜单数据的整个gridview。换句话说,我需要“动态”填充它们

我将弹出窗口的内容与示例文本一起放在Web用户控件中。因此,当鼠标悬停在GridView行上时,我需要填充此用户控件

以下是.aspx页面:

<asp:Panel ID="PopupPanel" runat="server" CssClass="modal" style="display: none;">
    <g3:OrderDetailsPopup ID="OrderPopup" runat="server"></g3:OrderDetailsPopup>
</asp:Panel>

<ajaxToolkit:HoverMenuExtender ID="HoverPopupExtender" runat="server" TargetControlID="PopupPanel" PopupControlID="PopupPanel" PopupPosition="Top" PopDelay="0"/>
更详细地说,我的鼠标悬停菜单以前工作得很好,但是加载一个包含300行的页面需要很长时间,每行中都有一个带有自己数据的弹出鼠标悬停菜单。因此,这里的目标是:

  • 用户控件中弹出代码的可重用性
  • 动态弹出鼠标悬停菜单

基本上,我们决定在用户控件加载时执行一个DB调用。。 这大大缩短了页面加载时间。基本上解决了这个问题

Public Function RenderMe(OrderID As Integer) As String
    Dim stringBuilder As StringBuilder = New StringBuilder()
    If ID > 0 Then
        ViewModel = New VM()
        ViewModel.ID = ID
        ViewModel.Fill()
        OrderDetails.DataSource = ViewModel.T
        DataBind()
        Dim stringWriter As StringWriter = New StringWriter(stringBuilder)
        Dim writer As HtmlTextWriter = New HtmlTextWriter(stringWriter)
        Render(writer)
    End If
    Return stringBuilder.ToString()
End Function

基本上,我们只是决定在用户控件加载时进行DB调用/耸肩
Protected Sub GridView1_RowCreated(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowCreated
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim hoverMenu As HoverMenuExtender = e.Row.FindControl("HoverPopupExtender")
        e.Row.ID = e.Row.RowIndex.ToString()
        hoverMenu.TargetControlID = e.Row.ID
    End If
End Sub

Protected Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim detailsGrid As GridView = e.Row.Cells(5).FindControl("gvOrderDetails")
        detailsGrid.DataSource = New G3.Entity.TaskDetails().GetDetailsByOrder(CType(e.Row.DataItem, DataRowView)("travelOrderID"))
        detailsGrid.DataBind()
    End If
End Sub
Public Function RenderMe(OrderID As Integer) As String
    Dim stringBuilder As StringBuilder = New StringBuilder()
    If ID > 0 Then
        ViewModel = New VM()
        ViewModel.ID = ID
        ViewModel.Fill()
        OrderDetails.DataSource = ViewModel.T
        DataBind()
        Dim stringWriter As StringWriter = New StringWriter(stringBuilder)
        Dim writer As HtmlTextWriter = New HtmlTextWriter(stringWriter)
        Render(writer)
    End If
    Return stringBuilder.ToString()
End Function