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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странное поведение страницы при PostBack'е 
:(
    Опции темы
Idsa
Дата 18.12.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Поймал я сегодня весьма странный глюк. Обнаружил, что при PostBack'е ObjectDataSource, связанный с GridView, как будто игнорируется (например, события Selecting, Creating не срабатывают). Хотя при первичной загрузке страницы все нормально.
Допускаю, что глюк где-то глубже, а то, что я наблюдаю, - лишь следствие.

Очень надеюсь на вашу помощь, ибо сам я в полном ступоре.


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


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

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



Цитата(Idsa @  18.12.2007,  22:02 Найти цитируемый пост)
Обнаружил, что при PostBack'е ObjectDataSource, связанный с GridView, как будто игнорируется 
 А это как ??? на сколько я понимаю механизм ObjectDataSource -- он начинает работать когда происходит Data bound у объекта, к которому он привязан. А если DataBound не вызывается, то и ObjectDataSource нет смысла инициализировать и хранить в памяти.



--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Idsa
Дата 18.12.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Mymik @  18.12.2007,  22:50 Найти цитируемый пост)
 А это как ??? на сколько я понимаю механизм ObjectDataSource -- он начинает работать когда происходит Data bound у объекта, к которому он привязан. А если DataBound не вызывается, то и ObjectDataSource нет смысла инициализировать и хранить в памяти.

Хм... ObjectDataSource привязывается к GridView декларативно через свойство DataSourceId. Вручную в этом случае вызывать DataBind нет необходимости. Следовательно, привязка должна происходить автоматически по-моему после PreRender.

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


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


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

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



читаем мануал.
Цитата

While the ObjectDataSource does not retain the instance of the business object across multiple requests, it can cache the result of the SelectMethod method. While the data is cached, subsequent calls to the Select method return the cached data instead of creating the business object and calling its SelectMethod using reflection. Caching lets you avoid creating the object and calling its data method at the expense of memory on the Web server; this might be a good trade-off. The ObjectDataSource automatically caches data when the EnableCaching property is set to true, and the CacheDuration property is set to the number of seconds that the cache stores data before the cache is discarded. You can also specify a CacheExpirationPolicy property and an optional SqlCacheDependency property. 

интересно написано здесь


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Idsa
Дата 19.12.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



tol05, насколько я понимаю, кэширование начинает работать только в том случае, если установить свойство ObjectDataSource.EnableCaching = true. Однако я кэширование не включал.
Может, я что-то неправильно понял?


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


Эксперт
****


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

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



Проблема решена... но ее решение вызвало еще больше вопросов.
Т. к. при postback'ах не вызывались события ObjectDataSource.Selecting, ObjectDataSource.ObjectCreating и т. д., стало ясно, что привязка не происходит в принципе. Поэтому в PreRender я решил принудительно вызывать myGridView.DataBind(). Сработало. Но мне не дает покоя вопрос, почему же binding не работал автоматически?


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


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

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



это сложный вопрос. Я когда-то гуглил по нему... жалоб много и объяснения вроде понятны - "кеширование, а что, разве плохо? Ведь хорошо же, правда?"

а вот как обойти... 

Много чего захардкодано в самом ObjectDataSource... Проще действительно при постбеке самому вызывать DaatBind() или ObjectDataSource.Select(), чем переписывать код взаимодействия ObjectDataSource со страницей и кешом...

Такое мое мнение.

Это сообщение отредактировал(а) tol05 - 21.12.2007, 17:37


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Idsa
Дата 21.12.2007, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(tol05 @  21.12.2007,  17:37 Найти цитируемый пост)
и объяснения вроде понятны - "кеширование, а что, разве плохо? Ведь хорошо же, правда?"

Хм... Кэширование, конечно, хорошо. Не спорю.
Мне непонятно, почему он продолжает кэшировать при ObjectDataSource.EnableCaching == false ?!


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

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

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

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


 




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


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

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