所以我有一个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返回也可以扩展的节点。因此,在我的webservice中,我将RadTreeNodeData对象的ExpandMode设置为Webservice..当我展开子节点时,它会正确地呈现数据。然而,现在我看到了与以前相同的问题,一些调用需要20-30秒。它甚至需要20-30秒才能命中我的even服务的中断点。我应该改用OnClientNodeExpand事件吗?我不明白为什么这么慢!任何帮助都是非常感谢的!
发布于 2011-03-19 21:45:22
我推荐使用OnClientNodeClicked,然后你就可以更新控件客户端了。如果您需要来自服务器的更多数据,您可以从客户端代码调用web服务。否则,为了加快速度,我可能不得不查看整个页面并查看来回发送的请求。也许你有很多的视图状态被序列化了,或者别的什么。
发布于 2011-03-19 23:37:18
在国际海事组织,最快的解决方案是使用web服务进行绑定。标准的AJAX功能仍然会发送ViewState和其他不必要的东西。你可以在这里找到更多,TreeView / Load on Demand Modes。因此,您的树视图将如下所示,您将在其中创建一个检索节点的ASMX或WCF服务(在本例中为Default.asmx处的服务上的LoadNodes方法)。
<telerik:RadTreeView ID="IncidentReportsTreeView" runat="server" >
<WebServiceSettings Path="Default.asmx" Method="LoadNodes" />
</telerik>发布于 2011-03-23 03:06:02
您是否尝试过将内容放在UpdatePanel中,以查看EnablePartialRendering是否有什么不同?不确定RadAjaxLoadingPanel是否会有所不同
树中有多少个元素?
https://stackoverflow.com/questions/5313224
复制相似问题