我的asp.net应用程序有一个函数,通过从数据库中获取用户的导航菜单返回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>
答案 0 :(得分:1)
我会缓存从数据库调用返回的数据,然后为每个页面生成导航html,因为它是你不想一遍又一遍地做的db调用。
要缓存数据我会做这样的事情(让不尝试过它):
public NavData GetNavData()
{
NavData navdata = Cache["NavData"];
if (navdata == null)
{
navdata = SomeDataStore.GetNavDataFromDatabase();
Cache["NavData"] = navdata;
}
return navdata;
}
虽然回答你的问题,并且没有粗鲁,你是否确定你把它放在Session而不是ViewState?
编辑:因为您已将该div转换为服务器控件,所以它将其值存储在ViewState中。
为navMenuDiv关闭ViewState:
navMenuDiv.EnableViewState = false;
答案 1 :(得分:1)
在div中使用EnableViewState =“false”:
<div id="navMenuDiv" class="navMenuDiv" runat="server" EnableViewState=”false”></div>