Я борюсь с этой проблемой уже несколько часов, и не могу приблизиться к решению.
Дело в том, что у меня есть несколько UpdatePanel
на главной странице. И затем, у меня есть RadTreeView
элемент управления на странице, который должен вызывать частичную обратную передачу при каждом нажатии на узел. Там все отлично работает.
Поскольку я использую то же дерево на некоторых других страницах, я переместил эту функцию на 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
s?