2017-04-20 79 views
0

我在RadOrgChart(telerik控件)中提供的项目模板内有一个按钮。无法触发RADorgChart中项目模板内按钮的点击事件

<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被烧成完美。

但正如我在更新面板中,我无法触发该按钮的单击事件。

  1. 链接按钮尝试过
  2. 按钮
  3. Telerik的按钮

试过在ASPX添加触发器,如:

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

但这里抛出错误:控制不了fou ND那我就从后面的代码与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 

我Resgistering事件试图做一个JS回发,即使在那里我不能击中服务器端点击事件。

等待回应。

回答

0

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

由于LinkBut​​ton位于ItemTemplate中,所以Server端事件不会被触发。

所以我们可以在这里做的是:所有的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到保持节点

<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。提交();

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 
相关问题