2017-04-20 14 views
0

RadOrgChart (telerik 컨트롤)에서 사용할 수있는 아이템 템플릿 안에 버튼이 있습니다.RadorgChart의 Item 템플릿 안의 버튼에 대한 클릭 이벤트를 발생시킬 수 없습니다.

<asp:UpdatePanel ID="uplDataHierarchy" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
     <div id="divOrgChart" runat="server" style="width: 100%; height: 480px; overflow-y: auto"> 
     <rad:RadOrgChart ID="radOrgChartHierarchy" runat="server" RenderMode="Lightweight" DisableDefaultImage="true" DataFieldID="ID" DataFieldParentID="PARENT_ID"> 
      <ItemTemplate> 
       <rad:RadLabel runat="server" ID="RadLblName" Text='<%# Eval("NAME")%>' CssClass="fa-align-center" Font-Size="X-Small"></rad:RadLabel> 
       <br /> 
       <rad:RadLabel runat="server" ID="RadLblPinCode" Text='<%# Eval("PINCODE")%>' CssClass="fa-align-center" Font-Size="X-Small"></rad:RadLabel> 
       <br /> 
       <rad:RadLabel runat="server" ID="RadLblAdd" Text='<%# Eval("Address")%>' CssClass="fa-align-center" Font-Size="X-Small"></rad:RadLabel> 
       <br /> 
       <asp:LinkButton ID="btnDetail" runat="server" CommandArgument='<%# Eval("ID") %>' Text="Get Detail" OnClick="btnDetail_Click" Font-Underline="false"></asp:LinkButton> 
      </ItemTemplate> 
     </rad:RadOrgChart> 
     <br></br> 
     </div> 
    </ContentTemplate> 
    <Triggers> 
    </Triggers> 
</asp:UpdatePanel> 

내가 BtnDetail에 대한 이벤트를 클릭하여 업데이트 패널없이 본 senerio을 데 완벽한 발사된다.

하지만 업데이트 패널 내부에서 단추에 대한 클릭 이벤트를 발생시킬 수 없습니다.

나는

  1. 링크 버튼과 그것을 시도
  2. 버튼
  3. telerik의 버튼과 같은 영문에 트리거를 추가하려고

:

<asp:AsyncPostBackTrigger ControlID="btnDetail" EventName="btnDetail_Click" /> 

그러나 여기 오류를 던지고있다 : 제어하지 fou

Protected Sub radOrgChartDealHierarchy_NodeDataBound(sender As Object, e As Telerik.Web.UI.OrgChartNodeDataBoundEventArguments) Handles radOrgChartDealHierarchy.NodeDataBound 
Dim lnkBtnDetail As LinkButton = e.Node.GroupItems(0).FindControl("btnDetail") 

스크립트 관리자

Dim scrPtMgr As ScriptManager = ScriptManager.GetCurrent(Me.Page) 
scrPtMgr.RegisterAsyncPostBackControl(lnkBtnDetail) 
End Sub 

I를 통해 이벤트를 Resgistering 패널

Dim aspT = New AsyncPostBackTrigger() 
aspT.ControlID = lnkBtnDetail.ToString() 
aspT.EventName = "Click" 
uplDataHierarchy.Triggers.Add(aspT) 

에 이벤트를 등록 :로 차 그럼 난 뒤에 NodeBound 이벤트와 코드에서 그것을 시도 js 포스트 백을 시도했는데 거기에서도 서버 사이드 클릭 이벤트를 칠 수 없습니다.

응답 대기 중입니다.

답변

0

마지막으로 4 일 동안 시도한 후 해결책을 얻었습니다.

LinkButton이 ItemTemplate 내부에 있으므로 서버 측 이벤트가 트리거되지 않습니다. 다음과 같이

그래서 우리가 여기서 할 수있는 것은 :뿐만 아니라

Protected Sub radOrgChartDealHierarchy_NodeDataBound(sender As Object, e As Telerik.Web.UI.OrgChartNodeDataBoundEventArguments) Handles radOrgChartDealHierarchy.NodeDataBound 
     Dim lnkBtnDetail As LinkButton = e.Node.GroupItems(0).FindControl("btnDetail") 
     lnkBtnDetail.OnClientClick = "bindDetails(" & e.Node.ID.ToString() & ");" 
End Sub 

당신은에 HiddenField를 추가해야합니다 NodeDataBound 클릭 이벤트에 대한 모든 먼저 우리가 컨트롤에 클라이언트 측 이벤트를 추가 할 필요가 노드

<asp:UpdatePanel ID="uplDataHierarchy" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
     <div id="divOrgChart" runat="server" style="width: 100%; height: 480px; overflow-y: auto"> 
     <asp:HiddenField ID="HdnFldSelectedILD_ID" runat="server" Value="0" /> 
     <rad:RadOrgChart ID="radOrgChartHierarchy" runat="server" RenderMode="Lightweight" DisableDefaultImage="true" DataFieldID="ID" DataFieldParentID="PARENT_ID"> 
      <ItemTemplate> 
       <rad:RadLabel runat="server" ID="RadLblName" Text='<%# Eval("NAME")%>' CssClass="fa-align-center" Font-Size="X-Small"></rad:RadLabel> 
       <br /> 
       <rad:RadLabel runat="server" ID="RadLblPinCode" Text='<%# Eval("PINCODE")%>' CssClass="fa-align-center" Font-Size="X-Small"></rad:RadLabel> 
       <br /> 
       <rad:RadLabel runat="server" ID="RadLblAdd" Text='<%# Eval("Address")%>' CssClass="fa-align-center" Font-Size="X-Small"></rad:RadLabel> 
       <br /> 
       <asp:LinkButton ID="btnDetail" runat="server" CommandArgument='<%# Eval("ID") %>' Text="Get Detail" OnClick="btnDetail_Click" Font-Underline="false"></asp:LinkButton> 
      </ItemTemplate> 
     </rad:RadOrgChart> 
     <br></br> 
     </div> 
    </ContentTemplate> 
    <Triggers> 
    </Triggers> 
</asp:UpdatePanel> 

의 ID를 유지하는 것은 다음 당신은 JS 함수를 다음을 추가해야합니다 : 여기 당신이 숨겨진 필드로 설정하고 다시 theForm로 포스트를 할 것입니다 노드의 ID를 얻을 것이다.submit();

If HdnFldSelectedILD_ID.Value = 0 Then 

     Else 
      //Your custom logic where you can access server side Controls as well 
     LoadCustom(HdnFldSelectedILD_ID.Value) 

     End If 

을 그리고 LoadCustom에 당신이 당신의 조작을 수행 할 수 있습니다 다음과 같이 숨겨진 필드의 값에 대한 페이지로드 검사에서 지금

function bindDetails(id) { 
       document.getElementById("<%=HdnFldSelectedILD_ID.ClientID%>").value = id; 
       theForm.submit(); 
} 

가 0이 아닌 경우

는 다음 처리를 할 서버 측 컨트롤도 마찬가지입니다.

Private Sub LoadFields(nID As Decimal) 
    RadLblName.Text="Test" 
End Sub