我現在正在爲此問題爭取幾個小時,而且我沒有接近解決方案。我的主頁上有幾個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
一起使用?
非常感謝!我知道我錯過了一些東西,但是這對我有所幫助,一切都如現在這樣運作。 – Pako 2011-03-24 19:46:47
當然......另一個選擇是在UserControl中實現'IPostBackEventHandler'接口,然後冒泡事件。如果你想保持清潔,就不能確切地知道我頭頂上的細節,但沒有理由不能這樣做。 – 2011-03-24 19:49:00