【发布时间】:2011-03-15 14:29:14
【问题描述】:
所以我有一个 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 问题......但由于某种原因,我的事件需要很长时间才能触发..
编辑: 因此,我遵循了这篇文章中的建议,并使用 Web 服务进行绑定并处理来自客户端代码的所有内容。一切似乎都很好,直到我决定我想从我的 Web 服务返回节点,这些节点也可以扩展。 . 所以在我的网络服务中,我将我的 RadTreeNodeData 对象的 ExpandMode 设置为 Webservice.. 并且当我展开子节点时它会正确呈现数据.. 但是现在我看到以前的相同问题,其中一些调用需要 20-30 秒..甚至需要 20-30 秒才能达到我的 web 服务中的断点。我应该改用 OnClientNodeExpand 事件吗?我不明白为什么这么慢!!非常感谢任何帮助!
【问题讨论】:
-
其他时间都快吗?我所说的快是指可以接受的速度。
-
只有第一次加载时才慢。在所有其他时间,这是一个非常可接受的速度。如果我刷新页面,第一次又慢了..然后其他时间都快。
-
我真的需要让这个工作..打开我的第一个赏金..希望有一些好的建议! :)