我现在正在为此问题争取几个小时,而且我没有接近解决方案。我的主页上有几个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