Telerik RadAjaxManager загружает элементы управления медленно в первый раз - PullRequest
0 голосов
/ 15 марта 2011

Итак, у меня есть RadPanelBar, и внутри него RadTreeView.На событии щелчка узла я хочу обновить некоторый элемент управления ... сейчас я просто пытаюсь обновить текстовое поле.Он работает нормально, за исключением того, что при первом нажатии на дочерний узел обновление элемента управления занимает очень много времени. Простое изменение текста.Я установил точку останова в своей функции и заметил, что для запуска события OnNodeClick требуется много времени. Если я щелкаю родительский узел в древовидной структуре, он отлично загружается при первом щелчке.Кроме того, после того, как я впервые щелкнул по нему ... он загружается быстро .. Если я обновляю страницу, то при первом щелчке он снова медленный .. Есть что-то, чего мне не хватает ... Не подходит ли структура моего HTML дляэти AJAX звонки?Я чувствую, что это действительно простой пример, который должен работать ..

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<telerik:RadAjaxManagerProxy ID="RadAjaxManagerProxy1" runat="server">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="IncidentReportPanel">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="IRViewPanel" LoadingPanelID="LoadingPanel1" />
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManagerProxy>
<telerik:RadAjaxLoadingPanel ID="LoadingPanel1" runat="server" Style="width: 320px;
    padding-top: 125px;" Skin="Vista">
</telerik:RadAjaxLoadingPanel>
<table width="100%">
    <tr style="height: 25px">
        <td>
        </td>
        <td>
        </td>
    </tr>
    <tr style="height: 100%">
        <td style="width: 250px">
            <telerik:RadPanelBar ID="IncidentReportPanel" runat="server" Height="450px" CssClass="IRPanel">
                <Items>
                    <telerik:RadPanelItem runat="server" Text="Incident Reports" ImageUrl="./Images/folder.gif"
                        Value="IncidentReports">
                        <Items>
                            <telerik:RadPanelItem>
                                <ItemTemplate>
                                    <telerik:RadTreeView ID="IncidentReportsTreeView" runat="server" OnNodeExpand="LoadTreeNodes"
                                        OnNodeClick="PopulateIRData">
                                        <Nodes>
                                            <telerik:RadTreeNode Text="Pending" ExpandMode="ServerSideCallBack" ImageUrl="./Images/completed.gif">
                                            </telerik:RadTreeNode>
                                            <telerik:RadTreeNode Text="Completed" ExpandMode="ServerSideCallBack" ImageUrl="./Images/completed.gif">
                                            </telerik:RadTreeNode>
                                        </Nodes>
                                    </telerik:RadTreeView>
                                </ItemTemplate>
                            </telerik:RadPanelItem>
                        </Items>
                    </telerik:RadPanelItem>
                    <telerik:RadPanelItem runat="server" Text="Calendar" ImageUrl="./Images/calendar.gif"
                        Value="Calendar">
                        <Items>
                            <telerik:RadPanelItem>
                                <ItemTemplate>
                                    <telerik:RadCalendar runat="server" ID="IRCalendar" Width="100%" />
                                </ItemTemplate>
                            </telerik:RadPanelItem>
                        </Items>
                    </telerik:RadPanelItem>
                </Items>
            </telerik:RadPanelBar>
        </td>
        <td>
            <asp:Panel ID="IRViewPanel" runat="server">
                <telerik:RadTextBox ID="RadText" runat="server">
                </telerik:RadTextBox>
            </asp:Panel>
        </td>
    </tr>
</table>

        protected void PopulateIRData(object sender, RadTreeNodeEventArgs e)
    {
        RadText.Text = "Hello, World!";
    }

РЕДАКТИРОВАТЬ: я обновил свой код в соответствии с этой статьей, http://www.telerik.com/help/aspnet-ajax/ajax-client-side-performance.html,и проблема не исчезла ... опять же, это происходит только в первый раз ..

РЕДАКТИРОВАТЬ: Просто чтобы уточнить, обновляя в соответствии с этой статьей, я имею в виду, что я удалил все таблицы и относительные ширины и заменил их напозиционирование css и фиксированная ширина ... проблема возникает только в первый раз ... и это случается иногда ... довольно часто я думал, что решил проблему, так как она начала быстро реагировать ... но потом, после того как я изменил свои .aspx иизменить его обратно (даже на ту же самую вещь, когда он работал быстро) .. У меня та же проблема ..

РЕДАКТИРОВАТЬ: Итак, я удалил компонент AJAX .. и настроить элемент управления так, чтобы онPostBack ... и это все еще занимает много времени, чтобы достичь моей точки останова ... так что кажется, что это не проблема AJAX ... но по какой-то причине мои события требуют много времени ..

РЕДАКТИРОВАТЬ: ТакЕслиЯ воспользовался советом по этому посту, и я использовал веб-сервисы для выполнения привязки и обработки всего, что происходит на стороне клиента. Все было в порядке, пока я не решил, что хочу вернуть узлы из своего веб-сервиса, которые также можно расширить.в моем веб-сервисе я установил ExpandMode моего объекта RadTreeNodeData в Webservice ... и он корректно отображает данные, когда я расширяю дочерние узлы ... Однако теперь я вижу ту же проблему, что и раньше, когда некоторые вызовы занимают 20-30 секунд.20-30 секунд, чтобы даже достичь точки останова в моем веб-сервисе. Должен ли я вместо этого использовать событие OnClientNodeExpand?Я не понимаю, почему это так медленно!Любая помощь с благодарностью!

Ответы [ 3 ]

0 голосов
/ 19 марта 2011

ИМО, самое быстрое решение - использовать веб-сервис для привязки.Стандартные функциональные возможности AJAX будут по-прежнему отправлять ViewState и другие ненужные по проводу.Вы можете найти больше здесь TreeView / Режимы загрузки по требованию .Итак, ваше древовидное представление будет выглядеть примерно так, как если бы вы создали службу ASMX или WCF, которая извлекает узлы (в данном случае метод LoadNodes в службе по умолчанию Default.asmx).

<telerik:RadTreeView ID="IncidentReportsTreeView" runat="server" >
    <WebServiceSettings Path="Default.asmx" Method="LoadNodes" />
</telerik>
0 голосов
/ 22 марта 2011

Вы пытались поместить контент в UpdatePanel, чтобы увидеть, имеет ли значение EnablePartialRendering какую-либо разницу? Не уверен, что RadAjaxLoadingPanel имеет значение

Сколько элементов в дереве?

0 голосов
/ 19 марта 2011

Я рекомендую использовать OnClientNodeClicked , а затем вы можете обновить элементы управления на стороне клиента.Если вам нужно больше данных с сервера, вы можете вызвать веб-сервис из кода клиента.В противном случае, чтобы ускорить это, мне, вероятно, придется просмотреть всю вашу страницу и посмотреть, какие запросы отправляются туда и обратно.Возможно, у вас много представлений, которые сериализуются или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...