【问题标题】:Not able to fire the click event for a button inside the Item template in RADorgChart无法触发 RADorgChart 中项目模板内的按钮的单击事件
【发布时间】:2017-04-20 11:51:08
【问题描述】:

我在项目模板中有一个按钮,该按钮在 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>

当我没有更新面板的情况下,BtnDetail 的点击事件正在完美触发。

但由于我将它放在更新面板中,我无法触发按钮的点击事件。

我试过了

  1. 链接按钮
  2. 按钮
  3. telerik 按钮

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

等待响应。

【问题讨论】:

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


    【解决方案1】:

    试了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() 执行 Post;

        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
    

    【讨论】:

      猜你喜欢
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多