Ведущий Диалог
Зарегистрирован: 18 July 2006
Сообщения: 169
Примеры кода: 0
|
Re: Где можно хранить ViewState кроме страницы пользователя? |
19 March 2008 11:12 |
|
|
|
|
vityanyaТогда при каждом запросе создаётся новый Guid key = Guid.NewGuid();
А старая переменная Session[key.ToString()] при этом остаётся в памяти?
При каждом запросе от памяти отъедается кусок = viewState.
Или я чего то не понял?
Да, сорри, глючу. Вот так нужно
protected override void SavePageStateToPersistenceMedium(object viewState)
{
string key = Request.Params["__VIEWSTATEKEY"];
if(string.IsNullOrEmpty(key))
key = Guid.NewGuid().ToString();
Session[key] = viewState;
ClientScript.RegisterHiddenField("__VIEWSTATEKEY", key);
}
protected override object LoadPageStateFromPersistenceMedium()
{
string key = Request.Params["__VIEWSTATEKEY"];
object viewState = Session[key];
return viewState;
}
http://www.developer.uz - Сайт, посвященный программированию в Узбекистане
Да, этот вариант лучше, НО и тут при использвании лезут странные глюки.
VIEWSTATE больше ПопАпом не убивается, зато что-то происходит с VIEWSTATE GridView.
Как буд то только GridView теряют VIEWSTATE.
Ошибка лезет в подобном коде:
int k = 0;
foreach (GridViewRow rw in BGTNData.Rows)
{
if (Convert.ToInt32(BGTNData.DataKeys[k].Value) == -10)
{
rw.Cells[2].Controls.Clear();
rw.Cells[8].Controls.Clear();
rw.Cells[1].Controls.Clear();
rw.Cells[0].Controls.Clear();
}
k++;
}
Говорит мол индекс находится за границами массива.
Пробовал ставить проверку впереди типа if (BGTNData.Visible && BGTNData.Rows.Count > 0)
не помогает, да и бессмысленна она по логике вещей, я же в foreach по СУЩЕСТВУЮЩИМ строчкам бегу.
Если отключить(закомментировать) хранение VIEWSTATE в сессии, то такого рода ошибки не возникают.
Может подскажете чего?
|
|