Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Динамические контролы. / 19 сообщений из 19, страница 1 из 1
15.12.2011, 11:21:21
    #37577049
Orion70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
Добрый день!
Про динамические контролы прочитал в форуме много и в принципе понял, как они должны работать.
Но моя задача поставлена так, что я не знаю, как заставить их работать.

Итак, что нужно:
1. на странице есть кнопка, которая по OnClick генерит GridView (заранее неизвесно количество и тип столбцов)
2. в GridView может попасть колонка, в которой необходимо поместить LinkButton. На этот LinkButton по OnClick будет вызываться некое событие.
3. все это должно работать без видимой перезагрузки с использованием UpdatePanel.

В чем проблема:
Событие динамического контрола должно формироваться не позднее Page_Load. Но в моей задаче на этапе Page_Load еще не известно, что будет в GridView. Это будет известно, когда сработает событие OnClick кнопки.

Вопрос. Можно ли и как реализовать данный механизм?
...
Рейтинг: 0 / 0
15.12.2011, 11:26:51
    #37577061
OracleLover
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
Orion70Добрый день!

Вопрос. Можно ли и как реализовать данный механизм?

JavaScript
...
Рейтинг: 0 / 0
15.12.2011, 11:29:37
    #37577067
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
OracleLoverOrion70Добрый день!

Вопрос. Можно ли и как реализовать данный механизм?

JavaScript
Не усложняйте. Достаточно про жизненный цикл почитать.
...
Рейтинг: 0 / 0
15.12.2011, 11:32:04
    #37577079
Orion70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
OracleLover,

javaScript не подойдет, мне нудна серверная обработка события
...
Рейтинг: 0 / 0
15.12.2011, 11:33:15
    #37577083
Orion70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
ShSerge,

Про жизненный цикл страницы читал.
...
Рейтинг: 0 / 0
15.12.2011, 12:51:30
    #37577322
brainproof
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
Событие динамического контрола должно формироваться не позднее Page_Load - эм под динамическим контролом имеется ввиду LinkButton и я так понимаю биндиш по клику. DataBinging grid колонки или строки не помню - разве не катит?
...
Рейтинг: 0 / 0
15.12.2011, 13:03:14
    #37577349
Orion70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
brainproofСобытие динамического контрола должно формироваться не позднее Page_Load - эм под динамическим контролом имеется ввиду LinkButton и я так понимаю биндиш по клику. DataBinging grid колонки или строки не помню - разве не катит?

Да, динамический контрол это LinkButton.
DataBinding строки происходит, когда вызывается DataBind Grid-a, а DataBind Grid-a осуществляется из метода OnClick кнопки.
Если бы оно осуществлялось из Page_load, то думаю проблем небыло.
...
Рейтинг: 0 / 0
15.12.2011, 14:22:21
    #37577606
brainproof
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
а что мешает это сделать? на форме явно лежит грид. по клику вызовется grid.dataBind() и тут уже событие перейдет в гридовский метод где можно делать по моему что угодно ..закинуть LinkButton в колонку и привязать ему событие.
...
Рейтинг: 0 / 0
15.12.2011, 14:40:54
    #37577667
Orion70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
brainproofа что мешает это сделать? на форме явно лежит грид. по клику вызовется grid.dataBind() и тут уже событие перейдет в гридовский метод где можно делать по моему что угодно ..закинуть LinkButton в колонку и привязать ему событие.

Так работать не будет. Закинуть LinkButton можно, а вот событие можно привязать не позже Page_Load, иначе оно работать не будет.
...
Рейтинг: 0 / 0
15.12.2011, 15:05:56
    #37577763
monstrU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
Orion70,

тоже небольшие предложения
1. gridview разместите внутри страницы сразу -просто коллекцию колонок сделайте пустой. будет проще
2. может переделать логику старницы - чтобы по кнопке страница редиректилась на новую страницу, где и будет жтот самы грид ? будет проще
3. после генерации грида после нажатия кнопки надо запомнить, что грид заполнялся, и при Page_init смотреть - если было такое заполнение, то нужно снова биндить грид - он у вас динамический
4. первый вариант сделайте без updatepanel - тоже будет задача
5. и подумайте, нужна ли вам Updatepanel - она всю форму отправляет на сервер при асинхронном обновлении страницы - в итоге все будет работать долго
...
Рейтинг: 0 / 0
15.12.2011, 15:50:13
    #37577915
Orion70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
monstrUOrion70,

тоже небольшие предложения
1. gridview разместите внутри страницы сразу -просто коллекцию колонок сделайте пустой. будет проще
2. может переделать логику старницы - чтобы по кнопке страница редиректилась на новую страницу, где и будет жтот самы грид ? будет проще
3. после генерации грида после нажатия кнопки надо запомнить, что грид заполнялся, и при Page_init смотреть - если было такое заполнение, то нужно снова биндить грид - он у вас динамический
4. первый вариант сделайте без updatepanel - тоже будет задача
5. и подумайте, нужна ли вам Updatepanel - она всю форму отправляет на сервер при асинхронном обновлении страницы - в итоге все будет работать долго

1. - я так и сделал
2. - можно, но вся задумка, чтобы страница не редиректилась. С редиректом сейчас все хорошо работает.
3. - 2 раза биндить грид? как вариант, но не хотелось бы.
5. - можно поподробнее. Мне как раз нужно, чтобы данные ходили меньше и чтобы редиректов небыло.
...
Рейтинг: 0 / 0
15.12.2011, 15:56:33
    #37577936
Orion70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
Нашел один вариант, не знаю насчет кривизны и есть одно но:

1. На страницу помещаем невидимый Button
2. На все LinkButton-ы Grid-a вешаем клиентский JavaScript: ...Attributes.Add("onclick"...
3. На невидимый Button вешаем серверное событие.
4. В javaScript пишем ClientScript.GetPostBackEventReference для нашей невидимой кнопки.

В этом варианте все события ловятся на сервере.

И теперь самое неприятное: GetPostBackEventReference перегружает страницу, не обращая внимания на UpdatePanel и AsyncPostBackTrigger :(

Никто не знает как это побороть?
...
Рейтинг: 0 / 0
15.12.2011, 16:03:21
    #37577963
brainproof
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
Orion70
ой я понял..я вспомнил..я такое примерно делал. Модель состояний и жизненный цикл меня обрезали.

Вам что к примеру надо сделать?
просто можно сгенерировать ссылку на ashx и передать туда параметры и обработать там? а по ответу хендлера потом можно будет обновить страницу и без всякого UpdatePanel и все на ajax
...
Рейтинг: 0 / 0
15.12.2011, 16:31:39
    #37578061
monstrU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
Orion70,

пункт 3 обязателен, так как у вас контрол динамически формируется - иначе обработчики не прицепятся. причем надо разделять - у вас постебек идет от кнопки или от нажатой ссылки
про 5 пункт
updatepanel всю форму отправляет на сервер. и только потом идет ответ от тех элементов, которые обновляются по ajax.
самое лучшее решение - серверную ссылку заменить на клиентскую и метод на сервере вызывать посредством хандлера ashx и Jquery - наименее ресурсоемкий вариант. если сделакет клиентскую ссылку, то пункт 3 отомрет
...
Рейтинг: 0 / 0
15.12.2011, 16:45:37
    #37578097
Orion70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
понял, спасибо, буду копать в сторону ashx.
Но всетаки интересно, можно ли сделать так, чтобы GetPostBackEventReference не перегружал всю страницу, чтобы обновлять только UpdatePanel?
...
Рейтинг: 0 / 0
15.12.2011, 16:57:41
    #37578134
brainproof
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
хех советы совпали с monstrU
да если сможеш на Page_Init проинициализировать грид на основе данных при нажатия кнопки( там в сессии или еще где). тебе вообщем надо по сути воссоздать контролы в гриде,которые были после нажатия кнопки , на Init дальше вьюстейт сделает свое дело и экшен сработает. Но имхо медленно.
ashx и Jquery прозрачнее
...
Рейтинг: 0 / 0
15.12.2011, 18:06:08
    #37578406
monstrU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
Orion70понял, спасибо, буду копать в сторону ashx.
Но всетаки интересно, можно ли сделать так, чтобы GetPostBackEventReference не перегружал всю страницу, чтобы обновлять только UpdatePanel?
брось ты этот вопрос. делай на jquery и ashx
...
Рейтинг: 0 / 0
15.12.2011, 19:26:33
    #37578550
Orion70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
monstrUбрось ты этот вопрос. делай на jquery и ashx

Я все-таки нашел причину :)
Если кому интересно:

Чтобы обновлялся только UpdatePanel GetPostBackEventReference нужно вызывать на кнопке, у которой Visible="true".
При Visible="false" по любому идет обновление всей страницы. Скрыть кнопку можно через стиль: style="visibility:hidden".
...
Рейтинг: 0 / 0
15.12.2011, 19:43:23
    #37578572
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические контролы.
гляньте на разницу в сгенерированном html при изменении Visible кнопки
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Динамические контролы. / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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