LinkButton во вложенных UserControls не запускает событие Command - PullRequest
1 голос
/ 13 мая 2009

У меня есть вложенный UserControl (этот элемент управления динамически загружается другим UserControl, который динамически загружается страницей aspx внутри MasterPage), в котором я хотел бы использовать LinkButton и событие OnCommand .

Эта кнопка должна быть добавлена ​​к некоторой панели, поэтому я подключился к событию OnLoad панели (ее необходимо создать до запуска событий в жизненном цикле):

protected void PatentAssignee_Load(object sender, EventArgs e) {
    Label label = (Label)sender;

    LinkButton link = new LinkButton();
    link.Text = name;
    link.Command += Link_OnCommand;
    link.CommandArgument = "argument";
    link.ID = "someID";

    label.Controls.Add(link)
}

protected void Link_OnCommand(object sender, CommandEventArgs e) {
    Response.Write(e.CommandArgument);
}

Но я не могу заставить метод Link_OnCommand быть вызванным. Еще одна вещь, которая может иметь отношение к этой проблеме: UserControl находится внутри UpdatePanel. Я также пытался заставить ссылку вызвать полный постбэк:

ScriptManager s = (ScriptManager)this.Page.Master.FindControl("__scriptManager");
s.RegisterPostBackControl(link);

... но это мало что меняет, страница полностью перезагружается, но событие не запускается.

РЕДАКТИРОВАТЬ: Как просили в комментариях, здесь более подробно о вложенности:

MasterPage
  PlaceHolder
    Page
      UpdatePanel
        UserControl1
          FormView
            PlaceHolder
              UserControl2
                LinkButton

Это означает, что UserControl2 загружается динамически.

Ответы [ 3 ]

2 голосов
/ 21 июня 2010

В одном из ваших элементов управления в иерархии отсутствует идентификатор. Установите идентификатор, и событие сработает. Это также вызывает хаос с помощью AjaxControlToolkit (убедитесь, что у каждого расширителя есть идентификатор, иначе поведение на стороне клиента будет часто не загружаться).

0 голосов
/ 22 ноября 2011

для ajax, я думаю, вы можете создать класс многократного использования

public void registerUCAsyncPostBack(Page page, WebControl webcontrol, UserControl usercontrol){
            Control ControlAjaxNew = null;
            if (webcontrol.GetType() == typeof(LinkButton))
            {
                ControlAjaxNew = (LinkButton)usercontrol.FindControl(webcontrol.ID);
            }
            ScriptManager.GetCurrent(page).RegisterAsyncPostBackControl(ControlAjaxNew);
        }
0 голосов
/ 13 мая 2009

Я помню, что у меня тоже была эта проблема. Я не нашел реальной проблемы, но то, что я сделал, это подключил обработчик событий в разметке aspx, и это сработало.

Вы также можете попытаться подключить обработчик событий на более ранней стадии жизненного цикла страницы.

Попробуйте обработчик событий PreInit.

Больше информации на странице жизненного цикла здесь .

...