所以我有一个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事件吗?我不明白为什么这么慢!!非常感谢任何帮助!
答案 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是否有所作为
树中有多少个元素?