无法为RADorgChart中的Item模板内的按钮触发click事件

时间:2017-04-20 11:51:08

标签: jquery asp.net vb.net telerik orgchart

我在项目模板中有一个按钮,该按钮在RadOrgChart(telerik Control)中可用。

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

当我在没有更新面板的情况下使用此senerio时单击 BtnDetail 的事件正在完成。

但是当我在更新面板中使用它时,我无法触发按钮的click事件。

我用

尝试了
  1. 链接按钮
  2. 按钮
  3. telerik按钮
  4. 尝试在aspx中添加触发器,如:

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

    但是在这里它抛出错误:控件未找到然后我从NodeBound事件的代码后面尝试了:

    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回发,即使在那里我也无法点击服务器端点击事件。

    等待回复。

1 个答案:

答案 0 :(得分:0)

最后尝试了4天后,我得到了解决方案。

由于LinkBut​​ton位于ItemTemplate内部,因此不会触发服务器端事件。

所以我们在这里可以做的如下: 首先,在NodeDataBound点击事件中,我们需要将客户端事件添加到控件:

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,并将使用theForm.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