2011-03-24 93 views
0

我現在正在爲此問題爭取幾個小時,而且我沒有接近解決方案。我的主頁上有幾個UpdatePanel s。然後,我在頁面上有RadTreeView控件,每次點擊節點時都會導致部分回發。一切工作正常。UserControl在UpdatePanel中導致完全回發

由於我在其他一些頁面上使用了相同的樹,我將此功能移至UserControl。我以前做過的東西,所以沒問題。移動了一些代碼到ascx,創建了一些事件。一切都爲我工作得很好。但是不是現在。

RadTreeView嵌套在UserControl,並與更新面板母版頁上的這種控制,見下圖:

<asp:Panel ID="pnlContentWrapper" runat="server" CssClass="ContentWrapper"> 
    <div id="HeaderBreadCrumb"> 
     <asp:ContentPlaceHolder ID="HeaderBreadCrumbContent" runat="server" /> 
    </div> 
    <div id="HeaderMenu"> 
     <asp:UpdatePanel ID="upnlTreeMenu" runat="server"> 
      <ContentTemplate> 
       <asp:ContentPlaceHolder ID="HeaderMenuContent" runat="server" /> 
      </ContentTemplate> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="treeProductTree" /> 
      </Triggers> 
     </asp:UpdatePanel> 
    </div> 
    <div id="TreeDiv"> 
       <fp:ProductTree ID="treeProductTree" runat="server" /> 
    </div> 
    <asp:Panel ID="ContentDiv" ClientIDMode="Static" runat="server"> 
     <asp:UpdatePanel ID="upnlTreeContent" runat="server"> 
      <ContentTemplate> 
       <asp:ContentPlaceHolder ID="TreePageContent" runat="server" /> 
      </ContentTemplate> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="treeProductTree" /> 
      </Triggers> 
     </asp:UpdatePanel> 
    </asp:Panel> 
</asp:Panel> 

而且用戶控制是非常簡單的:

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="ProductTree.ascx.vb" 
Inherits="ProductTree" %> 
<div> 
<telerik:RadTreeView ID="treeProductTree" ClientIDMode="Static" runat="server" EnableDragAndDrop="false" 
    SkinID="CustomSkin" CssClass="MasterProductTree" DataFieldID="NodeId" DataFieldParentID="NodeParentId" 
    DataTextField="NodeName" DataValueField="NodeId" /> 
</div> 

而且背後的一些代碼:

進口Telerik.Web.UI

Public Class ProductTree 
    Inherits System.Web.UI.UserControl 

    Public Event NodeExpand As EventHandler(Of ProductTreeNodeExpandEventArgs) 

    Public Event SelectedNodeChange As EventHandler 



    Protected Sub ProductTree_NodeExpand(ByVal sender As Object, ByVal e As RadTreeNodeEventArgs) _ 
     Handles treeProductTree.NodeExpand 
     Dim nodeId As Integer = CInt(e.Node.Value) 
     Dim evetArgs = New ProductTreeNodeExpandEventArgs(nodeId) 
     RaiseEvent NodeExpand(Me, evetArgs) 

     //'some logic 
    End Sub 

    Protected Sub ProductTree_OnNodeClick(ByVal sender As Object, ByVal e As RadTreeNodeEventArgs) _ 
     Handles treeProductTree.NodeClick 
     RaiseEvent SelectedNodeChange(Me, New System.EventArgs()) 
    End Sub 

End Class 

我不知道的是:爲什麼這會導致完全回發而不是部分?我懷疑這可能與提高我的SelectedNodeChange有關,但我不知道如何以其他方式處理它。我需要讓其他組件知道,節點選擇已更改。我該如何改進以使其與UpdatePanel一起使用?

回答

1

懷疑註冊UserControl作爲AsyncPostbackTrigger是不會讓你很遠。統一通信本身不是回傳控制,而是包含一個。我會將樹控件作爲usercontrol的公共屬性公開,然後在包含頁面的代​​碼中將樹控件本身註冊爲觸發器,而不是UserControl

檢查this有類似的情況...這不是一個很好的Q &一個線程,但它顯示了基本的要點。

+0

非常感謝!我知道我錯過了一些東西,但是這對我有所幫助,一切都如現在這樣運作。 – Pako 2011-03-24 19:46:47

+0

當然......另一個選擇是在UserControl中實現'IPostBackEventHandler'接口,然後冒泡事件。如果你想保持清潔,就不能確切地知道我頭頂上的細節,但沒有理由不能這樣做。 – 2011-03-24 19:49:00

1

那麼,我有類似的情況,但它有點複雜。

根據請求參數值實際添加引起回發的用戶控件。

我很高興ClietIDMode參數被添加了,我沒有想到像tat這樣的問題會被微軟忽略。

1

我現在正面臨同樣的問題......我可以通過用iFrame封裝UC來解決這個問題。

相關問題