2010-07-07 2 views
0

У меня есть страница asp.net, на которой у меня есть местозаполнитель и кнопка. После нажатия кнопки я хочу, чтобы на моем заполнителе появилось несколько кнопок LinkButtons, и я хочу, чтобы обработчик specyfic был подключен к click_event из моих LinkButtons.asp.net динамическая ссылкаButtons click event problem

Вот код:

protected void Button_Click(object sender, EventArgs e) 

{ 

for(...) 
    { 

    LinkButton l = new LinkButton(); 

    l.ID = "link" + i; 

    l.Command += new CommandEventHandler(link_Command); 

    PlaceHolder1.Controls.Add(l); 

} 

} 

void link_Command(object sender, CommandEventArgs e) 

     { 
      PlaceHolder1.Controls.Clear(); 
      Label l = new Label(); 
      l.Text = e.CommandArgument.ToString(); 
      PlaceHolder1.Controls.Add(l); 
     } 

В LinkButtons будут видны, но их событие не срабатывает. Как мне это решить? Мне нужно создать LinkButtons внутри события Button_Click, потому что только тогда я узнаю, сколько кнопок нужно создать. Пожалуйста помоги.

ответ

1

Ну, одна из первых проблем, с которой я столкнулся в свои первые дни программирования, напоминает мне о тех днях ... Это потому, что вы пытаетесь создать/внедрить управление asp динамически, и ASP.Net использует что-то ControlState и ViewState для извлечения состояние каждого элемента управления, который вы разместили на своей странице после обратной передачи. В вашем случае нет ControlState/ViewState для каждого созданного вами LinkButton, потому что вы на самом деле создали их динамически.

Я думаю, что простым способом решить эту проблему может быть использование некоторого элемента управления данными eg.Repeater/GridView обрабатывать ViewState без проблем.

И другой способ - изучить и прочитать о контрольном состоянии (немного сложном).

Reagards,

1

Проблема заключается в том, что вы добавляете LinkButtons на начальной визуализации страницы (когда пользователь нажимает на кнопку), но когда он отправляет обратно, они не были созданы заново, поэтому на странице нечего связывать события кликов. Вам нужно будет создать их снова в методе Page_Load, если это postback. Поэтому вам, вероятно, также потребуется сохранить часть информации, которую вы использовали для определения того, как создать LinkButtons в ViewState, чтобы вы могли повторно создать их в Page_Load. Как только вы это сделаете, элементы управления будут доступны на странице для привязки событий, и ваш обработчик будет вызван.

+0

Использование ViewStat помогает мне, спасибо. Вот еще одна проблема. У меня есть PlaceHolder в UpdatePanel, и я хочу добавить эти LinkButtons в asyncPostback, тогда будет вызываться Page_Load (где я воссоздаю ссылки)? Если нет, где я могу воссоздать ссылки и добавить к ним Click_handler? – Richmond

+0

EDIT: Я узнал, что Page_Load вызывается на каждый пост назад. Но когда я делаю частичную обратную передачу на своем placeHolder (внутри UpdatePanel), этот код не работает ... почему? String cos = (String) ViewState ["cos"]; Label l2 = new Label(); l2.Text = "<" + cos + ">"; PlaceHolder1.Controls.Add (l2); ViewState.Clear(); – Richmond

+0

Это может быть другой вопрос? вы добавляете ярлыки здесь вместо LinkButtons. какая часть кода не работает? они не добавляются? –

1

Когда вы нажмете кнопку «Создать ссылку», она вернет страницу назад. В каждом столбце вы должны повторно создать ссылку и повторно привязать обработчик событий.