2017-07-02 3 views
0

J'avais une Masterpage qui utilise comme sidebar pour la navigation. J'ai créé un contrôle utilisateur pour cette sidebar car chaque utilisateur aura son propre ensemble de menus de navigation.Fragment Mettre en cache un contrôle utilisateur dans asp.net webform Masterpage

Dans mon UserMenu, j'utilise Infragistic webexplorer et Iam pour créer chaque élément de webexplorer en utilisant dynamiquement le résultat ado.net de la base de données.

Tout fonctionne correctement. En haute bande passante, mais en faible bande passante, il faut 3 à 4 secondes pour que la barre de menus se charge, ce qui oblige les utilisateurs à attendre autant à chaque publication.

J'ai donc essayé la mise en cache de fragment .mais je ne semble pas vous working.can me suggère ce qui est erroné

En masterpage j'ai fait

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

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

Et dans mon usercontrol .ascx.cs j'avais fait le ci-dessous

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

Répondre

0

Cela semble être le problème d'Internet. Essayez d'utiliser l'appel AJAX au lieu du code du serveur pour la récupération du menu

1

Je crois que Page_Load sera toujours appelé même si l'UC est mis en cache. Essayez de vérifier si c'est dans le cache avant d'appeler loadexplorerebar(). Ce sera null si ce n'est pas dans le cache.

Donc, essayez de changer:

if (!IsPostBack) 

à:

if (!IsPostBack && WebExplorerBar1 == null)