Динамический текст хранится в viewstate - PullRequest
0 голосов
/ 19 августа 2010

В моем приложении asp.net есть функция, которая возвращает HTML-код для меню навигации для пользователя, получая его из базы данных

В настоящее время я сохраняю текст в переменной сеанса, когда начинается сеанс, а затем использую его для установки innerHtml навигационного div в методе on_load.

Проблема в том, что страницы теперь содержат

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

Ответы [ 2 ]

1 голос
/ 19 августа 2010

Используйте EnableViewState = ”false” в вашем div:

<div id="navMenuDiv" class="navMenuDiv" runat="server" EnableViewState=”false”></div>
1 голос
/ 19 августа 2010

Я бы кешировал данные, возвращенные из вашего вызова базы данных, а затем сгенерировал бы навигационный html для каждой страницы, поскольку это вызов db - это бит, который вы не хотите делать снова и снова.кэшировать данные я бы сделал что-то вроде этого (если бы не попробовал это):

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

В ответ на ваш вопрос, хотя и без грубости, вы уверены вы помещаете его в сеанс, а не в ViewState?

РЕДАКТИРОВАТЬ: поскольку вы превратили этот div в серверный элемент управления, он сохраняет его значение во ViewState.

Отключить ViewState для navMenuDiv:

navMenuDiv.EnableViewState = false;
...