片段在asp.net webform母版页中缓存用​​户控件

时间:2017-07-02 08:49:17

标签: c# asp.net webforms infragistics outputcache

我有一个主页,用作导航的侧边栏。我为该侧边栏创建了一个用户控件,因为每个用户都有自己的一组导航菜单。

在我的UserMenu中,我使用Infragistic webexplorer和Iam使用动态数据库中的ado.net结果创建webexplorer的每个项目。

一切都工作正常。在高带宽但低带宽下,菜单栏加载需要3-4秒。使用户在每次回发时等待这么多。

所以我尝试了片段缓存。但我似乎没有工作。你建议我怎么了

在主页上我做了

    <div>
    //this is my usercontrol
                         <uc1:DynamicMenuBar runat="server" id="DynamicMenuBar" />
    </div>      
     <div id="main" class="content" >

       <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
                    <div class="bodybackground">
                    </div>

                </asp:ContentPlaceHolder>
  </div>

在我的usercontrol .ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DynamicMenuBar.ascx.cs" Inherits="ArtWebApp.DynamicMenuBar" %>
<%@ Register assembly="Infragistics35.Web.v12.1, Version=12.1.20121.2236, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" namespace="Infragistics.Web.UI.NavigationControls" tagprefix="ig" %>
<%@ OutputCache Duration="600" VaryByParam="none" %>
<ig:WebExplorerBar ID="WebExplorerBar1" runat="server" Width="250px">
</ig:WebExplorerBar>

在我的usercontrol .ascx.cs中我完成了以下

   public partial class DynamicMenuBar : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                loadexplorerebar(); //this function creates the groups and childs based on the database result dynamically
                this.WebExplorerBar1.EnableViewState = true;
            }
        }

2 个答案:

答案 0 :(得分:1)

我相信即使uc被缓存,仍然会调用Page_Load。在调用loadexplorerebar()之前,请尝试检查它是否在缓存中。如果它不在缓存中,它将为null。

所以尝试改变:

if (!IsPostBack)

为:

if (!IsPostBack && WebExplorerBar1 == null)

答案 1 :(得分:0)

这似乎是互联网问题。尝试使用AJAX调用而不是服务器代码进行菜单检索