2011-03-24 9 views
0

저는 몇 시간 동안이 문제에 맞서고 있으며 해결책을 찾지는 못합니다.UserControl이 UpdatePanel에서 전체 포스트 백을 야기 함

문제 : 내 마스터 페이지에 UpdatePanel 수가 거의 없습니다. 그리고 나서 노드에 클릭 할 때마다 부분 포스트 백이 발생해야하는 페이지에 RadTreeView 컨트롤이 있습니다. 모든 것이 잘 작동합니다.

다른 페이지에서 동일한 트리를 사용하고 있으므로이 기능을 UserControl으로 옮겼습니다. 나 한테 해본 일이야, 아무 문제 없어. 일부 코드를 ascx으로 이동하여 일부 이벤트가 작성되었습니다. 모든 것이 항상 나를 위해 잘 돌아갔다. 그러나 지금은 아닙니다.

RadTreeViewUserControl 내에 중첩 및 업데이트 패널 마스터 페이지에서이 컨트롤은 아래를 참조한다 :

<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에서 작동하도록하려면 어떻게 향상시킬 수 있습니까?

답변

1

AsyncPostbackTrigger으로 등록하는 것이 당신을 매우 멀리 할 수 ​​있다고 의심되는 것으로 의심됩니다. UC 자체는 포스트 백 컨트롤이 아니라 오히려 하나의 컨트롤을 포함합니다. 트리 컨트롤을 사용자 정의 컨트롤의 public 속성으로 노출 한 다음 포함 페이지의 코드에서 UserControl 대신 트리 컨트롤을 트리거로 등록하십시오.

이와 비슷한 상황에 대해 this을 확인하십시오. 위대한 Q가 아닙니다. 스레드이지만 기본 요지가 나와 있습니다.

+0

고마워요! 나는 뭔가를 놓쳤다는 것을 알았지 만, 이것이 나를 도왔다. – Pako

+0

물론 ... 또 다른 옵션은 UserControl에서'IPostBackEventHandler' 인터페이스를 구현 한 다음 이벤트를 버블 링하는 것입니다. 내 머리 꼭대기에서 세부 사항을 정확하게 알 수는 없지만 깨끗하게 유지하려면 그럴 수 없습니다. –

1

음, 비슷한 상황이지만 좀 더 복잡합니다.

실제로 다시 게시를 유발하는 사용자 제어는 요청 매개 변수 값에 따라 동적으로 추가됩니다.

나는 ClietIDMode 매개 변수가 추가되어 매우 기뻤고, tat와 같은 문제는 Microsoft에서 간과 할 것이라고 생각하지 않았습니다.

1

내가 지금 직면 한 것과 같은 문제는 ... iFrame으로 UC를 마무리하면 해결할 수있는 문제입니다.

관련 문제