2010-08-19 8 views
0

Mon application asp.net a une fonction qui renvoie le code HTML pour le menu de navigation pour l'utilisateur en obtenant à partir d'une base de donnéesLe texte dynamique étant stocké dans viewstate

actuellement, je stocke le texte dans une variable de session lorsque la session commence et l'utilise ensuite pour définir le innerHtml de la div de navigation sur la méthode on_load.

Le problème est que les pages contiennent maintenant le

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPD.. 

la valeur étant de 7000 caractères.

Existe-t-il une meilleure façon de faire cela ou d'une manière différente pour stocker et récupérer des valeurs sans les stocker dans viewstate?

Le code est ceci:

Session["menuHTML"] = (new NavMenu().GetMenuHTML()); 
navMenuDiv.InnerHtml = Session["menuHTML"].ToString(); 

Le div est déclaré comme

<div id="navMenuDiv" class="navMenuDiv" runat="server"></div> 

Répondre

1

Je cache les données renvoyées de votre appel de base de données et générer le code HTML de navigation pour chaque page comme il est l'appel db qui est le bit que vous ne voulez pas faire encore et encore.

Pour mettre en cache les données que je ferais quelque chose comme ça (ont pas essayé):

public NavData GetNavData() 
{ 
    NavData navdata = Cache["NavData"]; 
    if (navdata == null) 
    { 
     navdata = SomeDataStore.GetNavDataFromDatabase(); 
     Cache["NavData"] = navdata; 
    } 
    return navdata; 
} 

En réponse à votre question cependant, et sans être grossier, êtes-vous sûr vous » re le mettre en Session et non ViewState?

EDIT: Parce que vous avez transformé ce div en un contrôle serveur, il stocke sa valeur dans ViewState.

commutateur ViewState off pour navMenuDiv:

navMenuDiv.EnableViewState = false; 
+0

yep. C'est ce que j'ai dans mon code session_start. Session ["menuHTML"] = (nouveau NavMenu(). GetMenuHTML()) – randomThought

+0

et comment voulez-vous "mettre en cache les données"? – randomThought

+0

Réponse éditée pour montrer l'exemple de la mise en cache des données. – DavidGouge

1

Utilisez EnableViewState = » false » dans votre div:

<div id="navMenuDiv" class="navMenuDiv" runat="server" EnableViewState=”false”></div>