При частичной обратной публикации кнопки полной обратной публикации работают как частичная обратная публикация, почему?

У меня есть элемент управления RadGrid, который динамически создается на page_init и добавляется в заполнитель, который находится внутри updatePanel на странице.

Мне нужно добавить новую кнопку в раздел CommandItem в RadGrid. Кнопка должна поддерживать полную обратную передачу.

RadGrid имеет событие под названием RadGrid_ItemCreated (), и именно туда я добавил свою новую кнопку, и она появляется в моей RadGrid:

 protected virtual void RdGridItemCreated(object sender, GridItemEventArgs e)
    {
        var itemType = e.Item.ItemType;

        switch (itemType)
        {        
            // other cases...
            case GridItemType.CommandItem:
                {
                    var gridCommandItem = e.Item as GridCommandItem;

                    if (gridCommandItem == null) return;

                    if (this.EnablePdfExport)
                    {
                        var pdfButton = CreateExportToPdfButton();

                        PageUtil.RegisterPostBackControl(pdfButton);

                        // this is the cell which contains the export buttons.
                       ((Table)gridCommandItem.Cells[0].Controls[0]).Rows[0].Cells[1].Controls.Add(pdfButton);                                                        
                    }
                    break;
                }
        }
    }

У кнопки есть событие Click, и к ней был добавлен метод в качестве обработчика события:

private Button CreateExportToPdfButton()
    {
        var result = new Button();
        result.ID = "btnExportToPdf";
        result.Click += ExportToPdfButtonClick;
        result.CssClass = "rgExpPDF";
        result.CommandName = "ExportToPdf";
        result.Attributes.Add("title", "Export to Pdf");            
        return result;
    }

Чтобы зарегистрировать событие обратной передачи для этого элемента управления, я использовал метод RegisterPostBackControl () ScriptManager.

 public static void RegisterPostBackControl(Control control)
    {
        var currentPage = (Page) HttpContext.Current.CurrentHandler;
        var currentScriptManager = ScriptManager.GetCurrent(currentPage);
        if (currentScriptManager != null)
        {
            currentScriptManager.RegisterPostBackControl(control);
        }
    }

Когда я нажимаю кнопку на RadGrid, он отправляет обратно на сервер, но проблема в том, что его событие Click никогда не возникает:

private void ExportToPdfButtonClick(object sender, EventArgs e)
    {
        // process
    }

Я не понимаю почему; какие мысли / помощь?

Если я не устанавливаю идентификатор для кнопки, возникает событие щелчка, но в этом случае возникает новая проблема. Когда на странице происходит частичная обратная передача с помощью внешнего раскрывающегося списка для обновления radgrid, моя настраиваемая кнопка экспорта отправляет обратные передачи асинхронно, тогда как она должна отправлять обратно полностью.

Большое спасибо,


person The Light    schedule 26.07.2011    source источник


Ответы (2)


Я исправил это, добавив новый элемент управления в следующем событии:

 this.RadGrid.MasterTableView.Init += MasterTableViewInit;

 void MasterTableViewInit(object sender, EventArgs e)
    {
        if (!this.EnablePdfExport) return;

        var commandItem = this.RadGrid.MasterTableView.GetItems(GridItemType.CommandItem).SingleOrDefault();

        if (commandItem == null) return;

        AddPdfButton(commandItem as GridCommandItem);
    } 
person The Light    schedule 27.07.2011

Я с той же проблемой. Я отследил это до того, как Telerik переключил свойство Visible дочерних элементов управления RadGrid на false во время рендеринга. Это влияет только на частичные обратные передачи страницы, потому что Render вызывается до того, как PageRequestManager записывает JavaScript для элементов управления обратной передачи, и пропускает элементы управления, которые не являются видимыми. Для полной обратной передачи (или начальной загрузки страницы) PageRequestManager записывает JavaScript для элементов управления обратной передачей до того, как RadGrid визуализируется, и, таким образом, элементы управления остаются видимыми.

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

person jam40jeff    schedule 04.01.2014