2010-08-19 52 views
0

我的asp.net應用程序具有通過從數據庫動態文本被存儲在ViewState中

目前

得到它返回用戶的導航菜單中的HTML,我存儲在會話變量當文本的功能會話開始,然後使用它在on_load方法上設置導航div的innerHtml。

的問題是,現在的網頁包含

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

取值爲7000個字符長。

有沒有更好的方法來做到這一點或以不同的方式來存儲和檢索值,而不將它們存儲在視圖狀態?

的代碼只是這樣的:

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

DIV的聲明爲

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

回答

1

我將緩存中的數據從數據庫調用返回,然後生成每個頁面的導航HTML,因爲它是數據庫調用,這是你不想一遍又一遍地做的一點。

要緩存我會做這樣的事情的數據(有試了一下):

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

在回答你的問題,雖然,而不粗魯,你肯定你」重新把它放在Session中而不是ViewState中?

編輯:因爲您已將該div轉換爲服務器控件,因此將其存儲在ViewState中。

開關的ViewState關閉navMenuDiv:

navMenuDiv.EnableViewState = false; 
+0

是的。這是我的session_start代碼。 Session [「menuHTML」] =(new NavMenu()。GetMenuHTML()) – randomThought 2010-08-19 11:48:34

+0

你將如何「緩存數據」? – randomThought 2010-08-19 11:49:13

+0

編輯答案以顯示緩存數據的示例。 – DavidGouge 2010-08-19 11:54:22

1

使用的EnableViewState在你的div =」假」:

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