Telerik RadAjaxManager第一次加载控件很慢

时间:2011-03-15 14:29:14

标签: c# asp.net ajax telerik

所以我有一个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问题...但出于某种原因,我的事件需要很长时间才能解决..

编辑: 所以我按照这篇文章的建议,我使用webservices来做我的绑定并处理客户端代码中的所有内容。所有似乎都没问题,直到我决定我想从我的webservice返回节点,也可以扩展。所以在我的web服务中,我将RadTreeNodeData对象的ExpandMode设置为Webservice ..当我展开子节点时,它正确呈现数据。但是现在我看到了之前一些调用需要20-30秒的相同问题。甚至在我的网络服务中达到断点需要20-30秒。我应该使用OnClientNodeExpand事件吗?我不明白为什么这么慢!!非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

我建议使用OnClientNodeClicked,然后您可以更新控件客户端。如果您需要来自服务器的更多数据,则可以从客户端代码调用Web服务。否则,为了加快速度,我可能需要查看整个页面并查看正在发送的请求。也许你有很多关于序列化的视图状态。

答案 1 :(得分:0)

IMO,最快的解决方案是使用Web服务进行绑定。标准的AJAX功能仍然会通过线路发送ViewState和其他不需要的flotsome。您可以在TreeView / Load on Demand Modes找到更多信息。因此,您的树视图将类似于以下内容,您将在其中创建检索节点的ASMX或WCF服务(在本例中为Default.asmx上的服务上的LoadNodes方法)。

<telerik:RadTreeView ID="IncidentReportsTreeView" runat="server" >
    <WebServiceSettings Path="Default.asmx" Method="LoadNodes" />
</telerik>

答案 2 :(得分:0)

您是否尝试将内容放入UpdatePanel以查看EnablePartialRendering是否有任何区别?不确定RadAjaxLoadingPanel是否有所作为

树中有多少个元素?