Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Создание контрола с событием. / 25 сообщений из 28, страница 1 из 2
17.05.2012, 10:09
    #37798275
dar55
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
Добрый день.
Только недавно начал осваивать 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.
protected void Page_Load(object sender, EventArgs e)
        {
            if (NavigationMenu.SelectedValue == "Справочник")
            {

                    LinkButton lnk1 = new LinkButton();
                    lnk1.ID = "linkbutton10";
                    lnk1.Text = "текст";
                    lnk1.Click += new EventHandler(this.Button1_Click);
                    Literal liter = new Literal();
                    liter.Text = "</br>";
                    ContentPlaceHolder2.Controls.Add(liter);
                    ContentPlaceHolder2.Controls.Add(lnk1);

            }
        }


 protected void Button1_Click(object sender, EventArgs e)
        {
//код
        }



Буду благодарен за помощь в прояснении этого вопроса.

С Уважением.
...
Рейтинг: 0 / 0
17.05.2012, 11:18
    #37798440
AHTOH_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
Скорее всего вы что то не так делаете.
я вижу 2 варианта:

Либо создавайте всё заранее.

Либо при нажатие на кнопку пишите что то в сессию и делайте Response.Redirect, далее в PageInit создавайте что надо.
...
Рейтинг: 0 / 0
17.05.2012, 11:30
    #37798464
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
dar55,

событие нужно привязывать всегда, вне зависимости от условий, т.к. asp.net webforms заново все инициализирует, включая события
если что, есть такая тема как __EVENTTARGET :) почитайте http://msdn.microsoft.com/ru-ru/magazine/cc163512.aspx, на всякий случай
...
Рейтинг: 0 / 0
17.05.2012, 11:44
    #37798495
dar55
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
SanSYS
почему то по вашей ссылке перейти не могу- "Содержимое не найдено", но по eventtarget почитаю.

Антон L
Возможно я немного не правильно выразился или не до конца понял ваш комментарий

Насколько я понимаю Page_Init выполняется раньше Page_Load...
Попробую более подробно описать проблему.

Код указанный в первом посте работает по следующему принципу:

При нажатии на ссылку Нафигационного меню "справочник", условие не срабатывает, т.е. .SelectedValue = ""

Выполняется Page_Load, а потом обновляется SelectedValue="справочник". Т.е. при следующем клике(на любом пункте меню) элемент создастся.

Т.е. получается так.
1. Я кликаю на пункте меню
2. Загружается страница заново
3. И только потом происходит обновление SelectedValue

А надо бы, чтобы сначала обновилось SelectedValue, а потом выполось событие Page_Load.
...
Рейтинг: 0 / 0
17.05.2012, 12:01
    #37798545
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
dar55SanSYS
почему то по вашей ссылке перейти не могу- "Содержимое не найдено", но по eventtarget почитаю.


Запятая http://msdn.microsoft.com/ru-ru/magazine/cc163512.aspx

давай так - размести кнопу на странице, и меняй ее Visible от условий, 100% работает, а динамическое создание контролов должно остаться в файле .design.cs, т.е. ты его сейчас не должен писать
...
Рейтинг: 0 / 0
17.05.2012, 12:12
    #37798570
Cy4eHoK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
Вопрос такой же: как правильно прописать событие на динамический контрол (клик на элемент меню -> добавляется контрол -> клик на этот контрол -> выполнение действия)?

То что SelectedValue не покатит это понятно, т.к. это возвращает предидущий селектнутый айтим.
...
Рейтинг: 0 / 0
17.05.2012, 12:12
    #37798571
Deza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
а не проще ли играться со свойством visibleу готового компонента чем каждый раз его создавать а?:)
...
Рейтинг: 0 / 0
17.05.2012, 12:13
    #37798575
Cy4eHoK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
SanSYSdar55SanSYS
почему то по вашей ссылке перейти не могу- "Содержимое не найдено", но по eventtarget почитаю.


Запятая http://msdn.microsoft.com/ru-ru/magazine/cc163512.aspx

давай так - размести кнопу на странице, и меняй ее Visible от условий, 100% работает, а динамическое создание контролов должно остаться в файле .design.cs, т.е. ты его сейчас не должен писать

Вы же понимаете, что это не дело :(
...
Рейтинг: 0 / 0
17.05.2012, 12:15
    #37798581
dar55
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
Пример упрощенный. Если бы была нужна одна кнопка, то вполне возможно.
А если мне надо создать неизвестное количество контролов(например содержание справочника), подгружая данные по контролам из таблицы базы данных.
Другие варианты списка контролов я вроде как представляю.
Но на данный момент я на уровне изучения ASP и пытаюсь понять механизм работы. А по моей обычной человеческой логике SelectedValue создано же не для того, чтобы узнавать, что в прошлый раз было нажато пользователем....


Спасибо за ссылку, теперь работает. Сам почему-то запятую не заметил :)
...
Рейтинг: 0 / 0
17.05.2012, 12:33
    #37798626
Deza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
dar55,

Основной механизм работы WebForm основан на Событиях
...
Рейтинг: 0 / 0
17.05.2012, 12:39
    #37798643
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
Думаю, что Вам надо использовать метод LoadControl вместо new что-то там :)
Если Вы чётко опишите задачу, будет проще дать точный ответ, упрощать пример не стоит.
...
Рейтинг: 0 / 0
17.05.2012, 12:46
    #37798663
Cy4eHoK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
skyANAДумаю, что Вам надо использовать метод LoadControl вместо new что-то там :)
Если Вы чётко опишите задачу, будет проще дать точный ответ, упрощать пример не стоит.

Я так понял, что задача такая же как и у меня:

Вопрос такой же: как правильно прописать событие на динамический контрол (клик на элемент меню -> добавляется контрол -> клик на этот контрол -> выполнение действия)?
...
Рейтинг: 0 / 0
17.05.2012, 13:00
    #37798713
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
Cy4eHoK Вопрос такой же: как правильно прописать событие на динамический контрол (клик на элемент меню -> добавляется контрол -> клик на этот контрол -> выполнение действия)? Ладно, будем вытягивать подробности :) UserControl, или WebControl?
...
Рейтинг: 0 / 0
17.05.2012, 13:18
    #37798777
Deza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
Cy4eHoKskyANAДумаю, что Вам надо использовать метод LoadControl вместо new что-то там :)
Если Вы чётко опишите задачу, будет проще дать точный ответ, упрощать пример не стоит.

Я так понял, что задача такая же как и у меня:

Вопрос такой же: как правильно прописать событие на динамический контрол (клик на элемент меню -> добавляется контрол -> клик на этот контрол -> выполнение действия)?

смотреть с 40 минуты
http://www.techdays.ru/videos/3290.html
...
Рейтинг: 0 / 0
17.05.2012, 13:51
    #37798910
dar55
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
skyANA, я так понимаю это вебконтрол.


Значит задача в чистом виде:
Есть элемент NavigationMenu(например список справочников с именами "справочник1", "справочник2".....)
При нажатии на пункт меню из базы данных должен тянуться собственный список LinkButton и эти контролы добавляются в ContentPlaceHolder2.

Т.е. должен генерироваться свой список linkButton, в ContentPlaceHolder2, в зависимости от выбора в NavigationMenu.


Я предполагал использование свойства SelectedValue.
Но возникает проблема, обновление этого свойства происходит после события Page_Load. А соответственно последний этап в котором можно создать событие это Page_Load....


Надеюсь задачу описал понятно.
...
Рейтинг: 0 / 0
17.05.2012, 14:04
    #37798959
Deza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
dar55skyANA, я так понимаю это вебконтрол.


Значит задача в чистом виде:
Есть элемент NavigationMenu(например список справочников с именами "справочник1", "справочник2".....)
При нажатии на пункт меню из базы данных должен тянуться собственный список LinkButton и эти контролы добавляются в ContentPlaceHolder2.

Т.е. должен генерироваться свой список linkButton, в ContentPlaceHolder2, в зависимости от выбора в NavigationMenu.


Я предполагал использование свойства SelectedValue.
Но возникает проблема, обновление этого свойства происходит после события Page_Load. А соответственно последний этап в котором можно создать событие это Page_Load....


Надеюсь задачу описал понятно.

вот должно помочь
http://www.sql.ru/blogs/ramin/1276
...
Рейтинг: 0 / 0
17.05.2012, 14:42
    #37799061
dar55
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
Deza, я посмотрел код в статье, не поможет. Там не создаются события.

Конечно контрол можно создать в событии NavigationMenu.Click, и они даже будут выглядеть нормально, т.е. как настоящие LinkButton'ы :)

Но вся засада в том, что присваивать им события в NavigationMenu_Click бессмысленно, так как они неинициализируются после события Page_Load.

А в статье по вашей ссылке там не создаются никакие события.
...
Рейтинг: 0 / 0
17.05.2012, 14:52
    #37799094
Deza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
dar55,

что ты хочешь делать по событию?
...
Рейтинг: 0 / 0
17.05.2012, 14:54
    #37799103
AHTOH_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
Когда происходит событие Button1_Click(object sender, EventArgs e)(или какой другой клик) - Вы знаете что вам надо создавать в PageLoad?

пишите что то в сессию
делайте Response.Redirect на эту же страницу - у вас снова будет событие PageLoad.
анализируете переменную в сессии и создаёте то что надо.
...
Рейтинг: 0 / 0
17.05.2012, 14:54
    #37799107
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
dar55При нажатии на пункт меню из базы данных должен тянуться собственный список LinkButton и эти контролы добавляются в ContentPlaceHolder2.Список LinkButton из базы данных, Вы шутите? :) Вы меню пытаетесь таким способом построить, или раскрыть подменю, или что?
...
Рейтинг: 0 / 0
17.05.2012, 16:49
    #37799448
dar55
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
Антон L, да что-то в этом плане я и предвидел, попробую вечером, спасибо.

skyANA, вы просили описать задачу, задача есть, а решения как бы нет. Но дискуссия по поводу самой постановки задачи это не то, что хотелось бы ;)
...
Рейтинг: 0 / 0
17.05.2012, 19:19
    #37799778
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
dar55skyANA, вы просили описать задачу, задача есть, а решения как бы нет. Но дискуссия по поводу самой постановки задачи это не то, что хотелось бы ;)Решение?
Пожалуйста:
- кладём Repeater, в ItemTemplate ему декларативно указываем LinkButton;
- по клику получаем данные из базы данных;
- заносим их в Repeater.DataSource, вызываем Repeater.DataBind

У меня просто есть подозрение, что Вы не в том направлении двигаетесь :) И я не хочу обсуждать постановку задачи (Вы не поставили задачу, Вы отрывками рассказываете как её решаете), я хочу услышать задачу общими словами, без привязки к реализации.
...
Рейтинг: 0 / 0
17.05.2012, 19:26
    #37799787
Deza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
skyANA,

+1
...
Рейтинг: 0 / 0
17.05.2012, 22:36
    #37799952
dar55
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
skyANA
Спасибо за вариант, не могу сказать что попробовал, я так сразу это не сделаю, так что почитаю в выходные немного о том что вы написали, и попробую реализовать :)

Как я и писал с самого начала, конкретной задачи нет, у меня есть большая и толстая книга, по которой я стараюсь освоить ASP.

Да, вы правы, я пока еще точно не знаю в каком варианте лучше реализовать меню, хотя конечно предположения есть, но к данному вопросу это отношения не имело.

Я хотел попробовать реализовать форму с динамическими контролами, и столкнулся с проблемой нелогичной с моей точки зрения отработкой событий.

Вот и задал вопрос. Суть вопроса такова, что контролы( не только навигационное меню) не могут проверить свои свойства типа selectedvalue до перезагрузки страницы, т.е. могут в событии клик, но создать после этого динамический контрол с событием уже невзможно(т.к. Page_Load уже произошло).

А пример был чисто гипотетический.
...
Рейтинг: 0 / 0
18.05.2012, 01:54
    #37800049
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание контрола с событием.
dar55, аааа, вот оно что :) прочитайте в Вашей большой и толстой книге по ASP.NET про жизненный цикл страницы, тогда всё станет понятно и логично... если не станет, то могу объяснить на пальцах :)
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Создание контрола с событием. / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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