2010-08-19 54 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>