获取Masterpage'的Telerik RadToolBar的内容页代码后面

本文关键字:代码 Telerik Masterpage 获取 RadToolBar | 更新日期: 2023-09-27 18:11:35

我现在正在使用Telerik AJAX开发一个ASP。. NET web表单。

在母版页中有一个Telerik RadToolBar控件:

...
<td width="100%">
  <div class="toolDiv">
    <telerik:RadToolBar ID="tbToolbar" runat="server" AutoPostBack="True" OnButtonClick="Toolbar_ButtonClick"
      OnClientButtonClicking="Toolbar_ClientButtonClicking" />
  </div>
</td>
...

出于某种原因,我想在使用这个母版页的内容页代码中获得这个工具栏控件,但是我尝试了

Master.FindControl("tbToolbar")

没有给我工具栏控件对象,我也试过MainMasterPage.FindControl(),没有运气。

是否有合适的方法来实现我想在这里做的事情?由于

编辑:

我的tbToolbar位于母版页中,结构如下:

<asp:Content ID="content" ContentPlaceHolderID="myPlaceHolder" runat="server">  
    ...
    <table>
      <tr>
        <td>
          <table>
            <tr>
              <td>
                <div>
                    <telerik:RadToolBar ID="tbToolbar">
  
</asp:Content>

EDITED2:(解决方案)

根据公认的答案,我添加了一个类来递归地找到我的控件,我把它贴在这里,以防有人觉得有用:

private class ControlFinder<T> where T : Control
{
  private readonly List<T> _foundControls = new List<T>();
  public IEnumerable<T> FoundControls
  {
    get { return _foundControls; }
  }
  public void FindChildControlsRecursive(Control control)
  {
    foreach (Control childControl in control.Controls)
    {
      if (childControl.GetType() == typeof(T))
      {
        _foundControls.Add((T)childControl);
      }
      else
      {
        FindChildControlsRecursive(childControl);
      }
    }
  }
}
protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
  {
    ControlFinder<RadToolBar> controlFinder = new ControlFinder<RadToolBar>();
    controlFinder.FindChildControlsRecursive(Master);
    RadToolBar toolBar = controlFinder.FoundControls.FirstOrDefault();
    // my logic //
    if(toolBar != null) ...
  }
}

获取Masterpage'的Telerik RadToolBar的内容页代码后面

如果你的控件"tbToolbar"在ContentPlaceHolder里面,那么你必须先找到ContentPlaceHolder的id,然后你必须从那个ContentPlaceHolder找到你的控件。请看下面的链接:

引用母版页上的控件

如果控制仍然不能找到,然后谷歌查找ASP。