2011-03-15 97 views
0

所以我有一個RadPanelBar,並在其中一個RadTreeView。在節點上單擊事件我想要更新一些控件..現在我只是試圖更新文本框。它工作正常,除了第一次點擊一個子節點需要很長時間來更新控件。只需簡單的文本更改。我在我的函數中設置了一個斷點,並且我注意到啓動OnNodeClick事件需要很長時間。如果我在樹視圖中單擊一個父節點,它會在第一次單擊時加載罰款。另外,第一次點擊它後,它加載速度快..如果我刷新頁面,它是緩慢的第一次點擊..有什麼我失蹤..是我的HTML結構不適合這些AJAX調用?我覺得這是一個非常簡單的例子,應該工作..Telerik RadAjaxManager加載控件第一次慢

<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服務來做我的綁定和處理客戶端代碼..所有似乎都沒事,直到我決定我想從我的webservice返回節點,也可能是exp anded ..所以在我的web服務中,我將RadTreeNodeData對象的ExpandMode設置爲Webservice ..並且當我展開子節點時它正確呈現數據。但是現在我看到了與之前相同的問題,其中一些調用需要20-30秒..它需要20-30秒,甚至在我的web服務中擊中斷點。我應該使用OnClientNodeExpand事件嗎?我不明白爲什麼這麼慢!任何幫助是極大的讚賞!

+0

其他所有時間都很快,我認爲速度可以接受。 – msarchet 2011-03-15 14:30:33

+0

僅在第一次加載時纔會很慢。所有其他時間,這是一個非常可接受的速度。如果我刷新頁面,它又是第一次緩慢......然後在所有其他時間快速。 – ntsue 2011-03-16 17:49:58

+0

我真的需要得到這個工作..打開我的第一個賞金..希望有一些很好的建議! :) – ntsue 2011-03-19 13:40:23

回答

0

我推薦使用OnClientNodeClicked然後你可以更新控件客戶端。如果您需要來自服務器的更多數據,則可以從客戶端代碼調用Web服務。否則,爲了加快速度,我可能不得不看到你的整個頁面,並看看來回發送的請求。也許你有很多viewstate正在序列化或什麼的。

+0

我發佈的東西幾乎都是我的代碼......我在視圖狀態中幾乎沒有任何東西..你有什麼測試可以推薦我嘗試去隔離這個問題嗎? – ntsue 2011-03-19 14:00:19

+0

我嘗試了你的建議...請看最新的編輯 – ntsue 2011-03-25 14:19:17

0

IMO,最快的解決方案是使用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> 
+0

我同意這會更快..但它仍然不應該需要10-12秒來打破我的斷點吧?我會考慮web服務,但我仍然想知道爲什麼它如此緩慢......任何想法? – ntsue 2011-03-19 21:44:57

+0

我嘗試了你的建議..請看最新編輯 – ntsue 2011-03-25 14:18:57

0

您是否嘗試過將內容放入UpdatePanel以查看EnablePartialRendering是否有所作爲?不確定RadAjaxLoadingPanel是否有所作爲

樹中有多少個元素?

+0

我看到延遲只有樹中的4個元素。我會嘗試更新面板的東西,讓你知道! – ntsue 2011-03-23 12:18:32

相關問題