簡體   English   中英

無法觸發RADorgChart的Item模板中按鈕的click事件

[英]Not able to fire the click event for a button inside the Item template in RADorgChart

我在項目模板內有一個按鈕,該模板在RadOrgChart(telerik控件)中可用。

<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的事件會觸發完美。

但是由於我將其放在更新面板中,因此無法觸發按鈕的click事件。

我嘗試過

  1. 鏈接按鈕
  2. 紐扣
  3. Telerik按鈕

試圖在aspx中添加觸發器,例如:

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

但是這里拋出了錯誤:找不到控件,然后我使用NodeBound Event從后面的代碼中嘗試了它:

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 aspT = New AsyncPostBackTrigger()
 aspT.ControlID = lnkBtnDetail.ToString()
 aspT.EventName = "Click"
 uplDataHierarchy.Triggers.Add(aspT)

通過腳本管理器重新設置事件

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

我也嘗試過執行js回發,即使我無法擊中服務器端的click事件。

等待響應。

經過4天的嘗試,我終於找到了解決方案。

由於LinkBut​​ton位於ItemTemplate內部,因此不會觸發服務器端事件。

因此,我們在這里可以執行以下操作:首先,在NodeDataBound click事件上,我們需要將客戶端事件添加到控件中:

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來保留節點的ID

<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>

然后,您必須添加以下JS函數:在這里,您將獲得要設置為“隱藏字段”的節點的ID,並使用Form.submit()進行回發;

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

現在在頁面加載中檢查“隱藏字段”的值是否不為0,然后按以下步驟進行處理:

 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中,您可以使用服務器端控件進行操作,例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM