|
|
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
Добрый день. Только недавно начал осваивать ASP, и с последовательностью выполнений событий до конца разобраться не могу. Подскажите, можно ли сделать рабочей, следующую логику. Есть навигационное меню NavigationMenu. Хочу создать объект типа LinkButton в зависимости от пункта меню на которое нажали. Как я понимаю событие к контролу можно создать не позже чем в Page_Load, но данные с события клика по навигационному меню на серверной стороне обновляются позже чем начинается загрузка страницы. Соответственно данный код работает не корректно, т.е. чтобы получить то действие которое нужно, надо два раза нажать на кнопку. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Буду благодарен за помощь в прояснении этого вопроса. С Уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 10:09 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
Скорее всего вы что то не так делаете. я вижу 2 варианта: Либо создавайте всё заранее. Либо при нажатие на кнопку пишите что то в сессию и делайте Response.Redirect, далее в PageInit создавайте что надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 11:18 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
dar55, событие нужно привязывать всегда, вне зависимости от условий, т.к. asp.net webforms заново все инициализирует, включая события если что, есть такая тема как __EVENTTARGET :) почитайте http://msdn.microsoft.com/ru-ru/magazine/cc163512.aspx, на всякий случай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 11:30 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
SanSYS почему то по вашей ссылке перейти не могу- "Содержимое не найдено", но по eventtarget почитаю. Антон L Возможно я немного не правильно выразился или не до конца понял ваш комментарий Насколько я понимаю Page_Init выполняется раньше Page_Load... Попробую более подробно описать проблему. Код указанный в первом посте работает по следующему принципу: При нажатии на ссылку Нафигационного меню "справочник", условие не срабатывает, т.е. .SelectedValue = "" Выполняется Page_Load, а потом обновляется SelectedValue="справочник". Т.е. при следующем клике(на любом пункте меню) элемент создастся. Т.е. получается так. 1. Я кликаю на пункте меню 2. Загружается страница заново 3. И только потом происходит обновление SelectedValue А надо бы, чтобы сначала обновилось SelectedValue, а потом выполось событие Page_Load. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 11:44 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
dar55SanSYS почему то по вашей ссылке перейти не могу- "Содержимое не найдено", но по eventtarget почитаю. Запятая http://msdn.microsoft.com/ru-ru/magazine/cc163512.aspx давай так - размести кнопу на странице, и меняй ее Visible от условий, 100% работает, а динамическое создание контролов должно остаться в файле .design.cs, т.е. ты его сейчас не должен писать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 12:01 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
Вопрос такой же: как правильно прописать событие на динамический контрол (клик на элемент меню -> добавляется контрол -> клик на этот контрол -> выполнение действия)? То что SelectedValue не покатит это понятно, т.к. это возвращает предидущий селектнутый айтим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 12:12 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
а не проще ли играться со свойством visibleу готового компонента чем каждый раз его создавать а?:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 12:12 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
SanSYSdar55SanSYS почему то по вашей ссылке перейти не могу- "Содержимое не найдено", но по eventtarget почитаю. Запятая http://msdn.microsoft.com/ru-ru/magazine/cc163512.aspx давай так - размести кнопу на странице, и меняй ее Visible от условий, 100% работает, а динамическое создание контролов должно остаться в файле .design.cs, т.е. ты его сейчас не должен писать Вы же понимаете, что это не дело :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 12:13 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
Пример упрощенный. Если бы была нужна одна кнопка, то вполне возможно. А если мне надо создать неизвестное количество контролов(например содержание справочника), подгружая данные по контролам из таблицы базы данных. Другие варианты списка контролов я вроде как представляю. Но на данный момент я на уровне изучения ASP и пытаюсь понять механизм работы. А по моей обычной человеческой логике SelectedValue создано же не для того, чтобы узнавать, что в прошлый раз было нажато пользователем.... Спасибо за ссылку, теперь работает. Сам почему-то запятую не заметил :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 12:15 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
dar55, Основной механизм работы WebForm основан на Событиях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 12:33 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
Думаю, что Вам надо использовать метод LoadControl вместо new что-то там :) Если Вы чётко опишите задачу, будет проще дать точный ответ, упрощать пример не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 12:39 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
skyANAДумаю, что Вам надо использовать метод LoadControl вместо new что-то там :) Если Вы чётко опишите задачу, будет проще дать точный ответ, упрощать пример не стоит. Я так понял, что задача такая же как и у меня: Вопрос такой же: как правильно прописать событие на динамический контрол (клик на элемент меню -> добавляется контрол -> клик на этот контрол -> выполнение действия)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 12:46 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
Cy4eHoK Вопрос такой же: как правильно прописать событие на динамический контрол (клик на элемент меню -> добавляется контрол -> клик на этот контрол -> выполнение действия)? Ладно, будем вытягивать подробности :) UserControl, или WebControl? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 13:00 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
Cy4eHoKskyANAДумаю, что Вам надо использовать метод LoadControl вместо new что-то там :) Если Вы чётко опишите задачу, будет проще дать точный ответ, упрощать пример не стоит. Я так понял, что задача такая же как и у меня: Вопрос такой же: как правильно прописать событие на динамический контрол (клик на элемент меню -> добавляется контрол -> клик на этот контрол -> выполнение действия)? смотреть с 40 минуты http://www.techdays.ru/videos/3290.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 13:18 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
skyANA, я так понимаю это вебконтрол. Значит задача в чистом виде: Есть элемент NavigationMenu(например список справочников с именами "справочник1", "справочник2".....) При нажатии на пункт меню из базы данных должен тянуться собственный список LinkButton и эти контролы добавляются в ContentPlaceHolder2. Т.е. должен генерироваться свой список linkButton, в ContentPlaceHolder2, в зависимости от выбора в NavigationMenu. Я предполагал использование свойства SelectedValue. Но возникает проблема, обновление этого свойства происходит после события Page_Load. А соответственно последний этап в котором можно создать событие это Page_Load.... Надеюсь задачу описал понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 13:51 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
dar55skyANA, я так понимаю это вебконтрол. Значит задача в чистом виде: Есть элемент NavigationMenu(например список справочников с именами "справочник1", "справочник2".....) При нажатии на пункт меню из базы данных должен тянуться собственный список LinkButton и эти контролы добавляются в ContentPlaceHolder2. Т.е. должен генерироваться свой список linkButton, в ContentPlaceHolder2, в зависимости от выбора в NavigationMenu. Я предполагал использование свойства SelectedValue. Но возникает проблема, обновление этого свойства происходит после события Page_Load. А соответственно последний этап в котором можно создать событие это Page_Load.... Надеюсь задачу описал понятно. вот должно помочь http://www.sql.ru/blogs/ramin/1276 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 14:04 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
Deza, я посмотрел код в статье, не поможет. Там не создаются события. Конечно контрол можно создать в событии NavigationMenu.Click, и они даже будут выглядеть нормально, т.е. как настоящие LinkButton'ы :) Но вся засада в том, что присваивать им события в NavigationMenu_Click бессмысленно, так как они неинициализируются после события Page_Load. А в статье по вашей ссылке там не создаются никакие события. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 14:42 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
dar55, что ты хочешь делать по событию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 14:52 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
Когда происходит событие Button1_Click(object sender, EventArgs e)(или какой другой клик) - Вы знаете что вам надо создавать в PageLoad? пишите что то в сессию делайте Response.Redirect на эту же страницу - у вас снова будет событие PageLoad. анализируете переменную в сессии и создаёте то что надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 14:54 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
dar55При нажатии на пункт меню из базы данных должен тянуться собственный список LinkButton и эти контролы добавляются в ContentPlaceHolder2.Список LinkButton из базы данных, Вы шутите? :) Вы меню пытаетесь таким способом построить, или раскрыть подменю, или что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 14:54 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
Антон L, да что-то в этом плане я и предвидел, попробую вечером, спасибо. skyANA, вы просили описать задачу, задача есть, а решения как бы нет. Но дискуссия по поводу самой постановки задачи это не то, что хотелось бы ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 16:49 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
dar55skyANA, вы просили описать задачу, задача есть, а решения как бы нет. Но дискуссия по поводу самой постановки задачи это не то, что хотелось бы ;)Решение? Пожалуйста: - кладём Repeater, в ItemTemplate ему декларативно указываем LinkButton; - по клику получаем данные из базы данных; - заносим их в Repeater.DataSource, вызываем Repeater.DataBind У меня просто есть подозрение, что Вы не в том направлении двигаетесь :) И я не хочу обсуждать постановку задачи (Вы не поставили задачу, Вы отрывками рассказываете как её решаете), я хочу услышать задачу общими словами, без привязки к реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 19:19 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
skyANA, +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 19:26 |
|
||
|
Создание контрола с событием.
|
|||
|---|---|---|---|
|
#18+
skyANA Спасибо за вариант, не могу сказать что попробовал, я так сразу это не сделаю, так что почитаю в выходные немного о том что вы написали, и попробую реализовать :) Как я и писал с самого начала, конкретной задачи нет, у меня есть большая и толстая книга, по которой я стараюсь освоить ASP. Да, вы правы, я пока еще точно не знаю в каком варианте лучше реализовать меню, хотя конечно предположения есть, но к данному вопросу это отношения не имело. Я хотел попробовать реализовать форму с динамическими контролами, и столкнулся с проблемой нелогичной с моей точки зрения отработкой событий. Вот и задал вопрос. Суть вопроса такова, что контролы( не только навигационное меню) не могут проверить свои свойства типа selectedvalue до перезагрузки страницы, т.е. могут в событии клик, но создать после этого динамический контрол с событием уже невзможно(т.к. Page_Load уже произошло). А пример был чисто гипотетический. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 22:36 |
|
||
|
|

start [/forum/topic.php?fid=18&fpage=129&tid=1359575]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 390ms |

| 0 / 0 |
