Asp.net UserControl导致UpdatePanel中的完全回发
我已经和这个问题斗争了几个小时,但我还没有接近解决方案 问题是:我的主页上几乎没有Asp.net UserControl导致UpdatePanel中的完全回发,asp.net,vb.net,updatepanel,Asp.net,Vb.net,Updatepanel,我已经和这个问题斗争了几个小时,但我还没有接近解决方案 问题是:我的主页上几乎没有UpdatePanels。然后,我在页面上有RadTreeView控件,每次单击节点时都会导致部分回发。那里一切都很好 因为我在其他一些页面上使用了相同的树,所以我将此功能移动到了UserControl。我以前做过的事,所以没问题。将一些代码移动到ascx,创建了一些事件。一切对我都很好。但现在不行 RadTreeView嵌套在UserControl中,此控件位于带有更新面板的母版页上,请参见以下内容: <a
UpdatePanel
s。然后,我在页面上有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>
我不知道的是:为什么这会导致完全回发而不是部分回发?我怀疑这可能与提高我的for
SelectedNodeChange
有关,但我不知道如何以其他方式处理它。我需要让其他组件知道,节点选择已更改。如何改进此功能,使其与UpdatePanel
s一起工作?怀疑将UserControl
注册为AsyncPostbackTrigger
不会有太大帮助。UC本身不是回发控件,而是包含一个回发控件。我将把树控件作为usercontrol的公共属性公开,然后在包含页面的代码隐藏中,将树控件本身注册为触发器,而不是usercontrol
检查类似的情况。。。这不是一个很好的问答线程,但它显示了基本要点。怀疑将
UserControl
注册为AsyncPostbackTrigger
不会让你走得很远。UC本身不是回发控件,而是包含一个回发控件。我将把树控件作为usercontrol的公共属性公开,然后在包含页面的代码隐藏中,将树控件本身注册为触发器,而不是usercontrol
检查类似的情况。。。这不是一个很好的问答主题,但它显示了基本要点。好吧,我有类似的情况,但它有点复杂 导致回发的用户控件实际上是根据请求参数值动态添加的
我很高兴添加了ClietIDMode参数,我不认为像tat这样的问题会被微软忽视 我也有类似的情况,但有点复杂 导致回发的用户控件实际上是根据请求参数值动态添加的
我很高兴添加了ClietIDMode参数,我不认为像tat这样的问题会被微软忽视 和我现在面临的问题一样。。。我认为可以通过使用iFrame包装UC来修复这个问题 和我现在面临的问题一样。。。我认为可以通过使用iFrame包装UC来修复这个问题 非常感谢!我知道我错过了一些东西,但这对我很有帮助,现在一切正常。当然。。。另一个选项是在UserControl中实现
IPostBackEventHandler
接口,然后冒泡事件。我不太清楚我脑子里的细节,但如果你想保持干净,没有理由你不能这么做。非常感谢!我知道我错过了一些东西,但这对我很有帮助,现在一切正常。当然。。。另一个选项是在UserControl中实现IPostBackEventHandler
接口,然后冒泡事件。我不太清楚我脑子里想的细节,但如果你想保持干净,没有理由你不能这么做。
<%@ 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>
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