Частичное возвращение сообщения приводит к тому, что кнопки полного возврата назад действуют как частичное возвращение назад, почему? - PullRequest
0 голосов
/ 26 июля 2011

У меня есть элемент управления 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, тогда моя пользовательская кнопка экспорта отправляет обратные передачи асинхронно, тогда как она должна отправлять обратно полностью.

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

Ответы [ 2 ]

0 голосов
/ 04 января 2014

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

Я не уверен, почему Telerik делает это, так как это вызывает множество проблем со свойством Visible на этапе Render.

0 голосов
/ 27 июля 2011

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

 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);
    } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...