Ведущий Диалог
Зарегистрирован: 18 July 2006
Сообщения: 169
Примеры кода: 0
|
Re: Где можно хранить ViewState кроме страницы пользователя? |
24 March 2008 15:58 |
|
|
|
|
M234
Да, этот вариант лучше, НО и тут при использвании лезут странные глюки.
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 в сессии, то такого рода ошибки не возникают.
Может подскажете чего?
Уважаемый ALL мне всё ещё очень нужна ваша помощь.
Я перерыл половину инета и попал в замкнутый круг.
В случае если использовать здесь предложенное решение:
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;
}
то не сохраняется состояние GridView.
Эта проблема описана на многих сайтах, но решения я нигде не нашёл.
Кое где предлагают использовать "решение" от Микрософт:
public class SessionPageStateAdapter :
System.Web.UI.Adapters.PageAdapter
{
public override PageStatePersister GetStatePersister ()
{
return new SessionPageStatePersister(this.Page);
}
}
но у него проблемы с ПопАп страницами, которую я тут уже описывал.
В общем мучаюсь уже сколько и не могу ничего придумать.
Как бы скрестить ежа с ужом? Я вот думаю, может можно как то модифицировать Микрософтовский вариант, что бы у него небыло проблемы с ПопАпами. Не знаю только как.
Помогите пжалста кто чем может.
|
|