powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ViewState и несколько экземпляров юзер контрола!
15 сообщений из 15, страница 1 из 1
ViewState и несколько экземпляров юзер контрола!
    #33966433
busybox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то читал, что когда создаешь свой собственный контрол и собираешься использовать ViewState для сохранение его мемберов, то необходимо использовать какие-то дополнительные параметры вьюстэйта, иначе если на странице будет несколько инстансов этого контрола, то они будут шарить один и тот же вьюстэйт, вместо того чтоб иметь свой собственный.

Кто что думает по этому поводу? О каких параметрых вобще речь?

Спасибо.
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33966723
Dimon aka Manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Глупости все это. Каждый контрол будет юзать свой вьюстейт.

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33967317
busybox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Dimon aka Manowar, Вы писали:

DAM>Глупости все это. Каждый контрол будет юзать свой вьюстейт.

DAM>
данное сообщение получено с www.gotdotnet.ru
DAM>ссылка на оригинальное сообщение


Точно вам говорю, читал в какой-то книжке, что мол если у одного экземпляра самодельного контрола напишешь ViewState["property"] = "trali-vali", то у всех остальных экземпляров этого же контрола ViewState["property"] будет возвращять тоже "trali-vali". И это как-то лечится какими-то хитрыми ключами. А вот как и какими — загадка.

Еще есть каки-нито мысли на эту тему?
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33967468
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бред какой-то, а ну-ка книжку в студию!


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33967592
CyberRussia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фигня в книжке написанна, но если Вас уж очень сильно донимает, то ViewState[this.UniqueID+"property"] Вам помогут.
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33968255
RustM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, busybox, Вы писали:

B>Еще есть каки-нито мысли на эту тему?

Проверить все это самому трудно или религия мешает? :)... << RSDN@Home 1.2.0 alpha rev. 655>>
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33968309
Dimon aka Manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МОжет там речь шла о контролах внутри template контрола?


Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33968402
Dronopotamus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, busybox, Вы писали:

B>Еще есть каки-нито мысли на эту тему?

на заборе тоже пишут
открываем рефлектор, смотрим Page.ProcessRequestMain


...
this.OnInitComplete(EventArgs.Empty);
...
if (this.IsPostBack)
{
    ...
    this.LoadAllState();
    ...
}
...

вау, круто! лезем в LoadAllState();


object obj1 = this.LoadPageStateFromPersistenceMedium();
...
IDictionary dictionary1 = (obj1 as Pair).First as IDictionary;
...
  foreach (Control control1 in this._registeredControlsRequiringControlState)
    {
                control1.LoadControlStateInternal(dictionary1[control1.UniqueID]);
    }
...

вьюстейт будет один и тот же только в том случае, если у двух контролов один и тот же UniqueID.
Как формируется коллекция _registeredControlsRequiringControlState и можно ли туда запихать два контрола с одинаковым UniqueID — если интересно, посмотрите сами.
Но ИМХО, такое вполне может случится. Как я понимаю, уникальность UniqueID сильно зависит от разработчика контролов. Если, допустим, он в контейнерном составном контроле переопределяет CreateChildControls, явно назначая ID дочерним контролам, и в то же время забывает относледоваться от INamingContainer — то при помещении пары таких контейнеров будут созданы контролы с одинаковым UniqueID. Но это моё имхо — надо проверять.... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33968497
Dronopotamus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Dronopotamus, Вы писали:

я прогнал, а никто и не заметил :))

снова открываем LoadAllState


object obj1 = this.LoadPageStateFromPersistenceMedium();
...
IDictionary dictionary1 = (obj1 as Pair).First as IDictionary;
...
  foreach (Control control1 in this._registeredControlsRequiringControlState)
    {
                control1.LoadControlStateInternal(dictionary1[control1.UniqueID]);
    }
...
//это все нам не нужно, это про контрол стейт
...
if (!this._fPageLayoutChanged)
{
            base.LoadViewStateRecursive(pair1.Second);
}
//вот что нам нужно )

смотрим LoadViewStateRecursive


...
if ((this.Page != null) && this.Page.IsPostBack)
{
    if (this.LoadViewStateByID)
    {
                this.LoadChildViewStateByID(list1);
    }
    else
    {
                this.LoadChildViewStateByIndex(list1);
    }
}
...

оказывается есть флаг :)
вот что пишет мсдн
By default, when a parent control loads view state into child controls it creates, it does this by the position of each child control in the parent control's Controls collection. When view state is initially applied, all child controls might not have been created. In this case, the view state for controls not yet created is saved, and applied when the child controls are created later.

For a parent control to apply view state to its child controls, two conditions must be met:

On postback, the parent control must create the child controls in exactly the same order as the previous request so that the order of the controls remains consistent.

After postback, any child controls created must be added to the end of the parent control's Controls collection.

If these two conditions cannot be met, as in the case of the delayed creation of a child control, the parent control can load view state by using ID. To set the LoadViewStateByID property to true, use the ViewStateModeByIdAttribute metadata attribute for the parent control.
если вьюстейт грузицца по индексу — то вообще не может быть ситуации что у разных контролов был один и тот же вьюстейт, так как индексы разные
а если по ID — то на усмотрения разработчика контрола (может же он создать пару дочерних контролов с одинаковым ID), но для этого надо заюзать модный аттрибут...... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33968748
busybox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Dronopotamus, Вы писали:

D>Здравствуйте, Dronopotamus, Вы писали:


D>оказывается есть флаг :)

То-то же! :-)
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33968755
busybox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Лиман Артём, Вы писали:


ЛА>бред какой-то, а ну-ка книжку в студию!

В том-то и дело что ни фига не бред!

Книжку не помню, аспнэтом занимался полтора года назад.
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33968869
Gollum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, busybox, Вы писали:

B>Где-то читал, что когда создаешь свой собственный контрол и собираешься использовать ViewState для сохранение его мемберов, то необходимо использовать какие-то дополнительные параметры вьюстэйта, иначе если на странице будет несколько инстансов этого контрола, то они будут шарить один и тот же вьюстэйт, вместо того чтоб иметь свой собственный.

B>Кто что думает по этому поводу? О каких параметрых вобще речь?

Итак, вьюстейт, он вообще один — это hidden поле на странице. Вопрос стоит в уникальности ключей. Нужно просто пользоваться уникальными ключами. Можно пользоваться также ControlState — это как раз обособленный вьюстейт для контролов, причем он работает, даже если выключен вьюстейт на странице.

Подробности здесь.

Атрибут указанный выше, это немного не то:

The ViewStateModeByIdAttribute class is used to specify a control that requires view-state loading by ID. The default view-state loading behavior is for ASP.NET to load the view-state information for a control by its index in the control tree of the page. There is a performance cost for loading view-state information by ID because the page control tree must be searched for the control specifically before loading its view-state information.

If the ViewStateModeByIdAttribute class is used as a metadata attribute of a custom control class,

the LoadViewStateByID property of the control returns true. If the ViewStateModeByIdAttribute class is not used, the LoadViewStateByID property of the control returns its default value of false, which means that the control does not load its view-state information by ID.В инфракрасный прицел мы видны, как небесный ОМОН
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33968952
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dronopotamus, чё то я в своем рефлекторе такого кода не вижу, может речь
идет про .НЕТ 2.0 ?


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33968994
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dronopotamus, да вижу, что речь идет о .НЕТ 2.0.
Хорошо, допустим можна сделать так, что бы вьюстейт загружался по ID
контрола. Но я так же вижу, что метод, который это делает
(LoadChildViewStateByID) в конце концов использует метод FindControl, а
последний в свою очередь не допускает использование не уникальных ID в своей
иерархии о чём культурно известит в исключении. Так что - всё должнл быть
нормально. Чего и следовало ожидать.

В том-то и дело что ни фига не бред!
не верю (с)


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ViewState и несколько экземпляров юзер контрола!
    #33969445
Dronopotamus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Лиман Артём, Вы писали:


ЛА>2 Dronopotamus, да вижу, что речь идет о .НЕТ 2.0.
ЛА>Хорошо, допустим можна сделать так, что бы вьюстейт загружался по ID
ЛА>контрола. Но я так же вижу, что метод, который это делает
ЛА>(LoadChildViewStateByID) в конце концов использует метод FindControl, а
ЛА>последний в свою очередь не допускает использование не уникальных ID в своей
ЛА>иерархии о чём культурно известит в исключении. Так что — всё должнл быть
ЛА>нормально. Чего и следовало ожидать.

ок, тнкс за дополнения.
значит книжка гонит при любом сценарии )
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ViewState и несколько экземпляров юзер контрола!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]