Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Восстановление содержимого HiddenField 
:(
    Опции темы
EASports
Дата 27.3.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Всем привет, помогите с такой проблемой:
Делаю веб-часть. В неё на On_Load сначала this.Controls.Clear(), потом подгружаю туда UserControl, помимо этого добавляю к вебчасти 2 HiddenField'а. 
Есть процедурка инициализации контролов вебчасти:
Код

public void Render()
{
            HiddenField _mode = null;
            HiddenField _newsNum = null;

            if (this.FindControl("_mode") != null)
                _mode = (HiddenField)this.FindControl("_mode");
            else
            {
                _mode = new HiddenField();
                _mode.ID = "_mode";
            }

            if (this.FindControl("_newsNum") != null)
                _newsNum = (HiddenField)this.FindControl("_newsNum");
            else
            {
                _newsNum = new HiddenField();
                _newsNum.ID = "_newsNum";
            }

            if ((this.Page.Session["state1"] != null) && (_mode.Value == ""))
            {
                _mode.Value = this.Page.Session["state1"].ToString();
                this.Page.Session.Remove("state1");
            }

            if ((this.Page.Session["state2"] != null) && (_newsNum.Value == ""))
            {
                _newsNum.Value = this.Page.Session["state2"].ToString();
                this.Page.Session.Remove("state2");
            }

            this.Controls.Add(_mode);
            this.Controls.Add(_newsNum);

            string usercontrolpath = "";

            
            switch (currentMode)
            {
                case "View": usercontrolpath = @"/_controltemplates/WSSNews/WSSNewsDetails.ascx"; break;
                case "Edit": usercontrolpath = @"/_controltemplates/WSSNews/WSSNewsDetails.ascx"; break;
                case "Add": usercontrolpath = @"/_controltemplates/WSSNews/WSSNewsDetails.ascx"; break;
                case "Settings": usercontrolpath = @"/_controltemplates/WSSNews/WSSNewsDetails.ascx"; break;
                default: usercontrolpath = @"/_controltemplates/WSSNews/WSSNews.ascx"; break;
            }

            
            System.Web.UI.Control userControl = this.Page.LoadControl(usercontrolpath);
            userControl.ID = "news";
            userControl.EnableViewState = false;
            this.Controls.Add(userControl);
}

Как видно здесь, в зависимости от состояния currentMode, должен подгружаться определённый контрол. Ну и ещё в каждом из этих контролов также идёт обращение к currentMode и newsNum. Есть свойства, которые выдирают значения из HiddenField'ов. Вобщем суть в том, что при постбаке содержимое HiddenField'ов не восстанавливается. А мне нужно чтобы восстановилось и при любом обновлении страницы, все значения сохранялись, пока их оттуда насильно не уберут. Сессией заменять нельзя сей механизм, т.к. при нажатии в браузере на кнопочку "назад", currentView не поменяется и соответственно произойдёт конфуз. Есть какие-нибудь предложения? Если надо код какой-то ещё, пишите, выложу.

PS: "this.Page.Session["state2"]"  - таким образом пытался решить эту проблему (в теле свойства дублировал информацию в сессию) , но всё равно этого не достаточно.
PM MAIL   Вверх
Idsa
Дата 27.3.2009, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



EASports, чтобы данные восстанавливались, нужно создавать Hidden-контролы, например, в Page_Load. А потом, после того как пройдет считывание информации из PostBack (подробности того, какое событие за каким следует, можно найти в MSDN), например в Page_PreRender, значения уже восстановятся.

Это сообщение отредактировал(а) Idsa - 27.3.2009, 14:37


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
EASports
Дата 27.3.2009, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Т.е. как бы мне нужно создать Hidden контролы на Page_Load, а проверить, лежит ли в них чего в Page_PreRender?
PM MAIL   Вверх
Idsa
Дата 27.3.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



EASports, да. Rонтролы заполняются данными из PostBack'а в методе ProcessPostData, который вызывается перед и после Page_Load.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.