Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net UserControl导致UpdatePanel中的完全回发_Asp.net_Vb.net_Updatepanel - Fatal编程技术网

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