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

Get Masterpage's Telerik RadToolBar in content page code behind

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

母版页中有一个 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:(解决方案)

按照接受的答案的建议,我添加了一个 class 以递归地找到我的控件,我在这里 post 它以防有人发现它有用:

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) ...
  }

}

如果您的控件 "tbToolbar" 在 ContentPlaceHolder 中,那么您必须首先通过 ID 找到 ContentPlaceHolder,然后您必须从该 ContentPlaceHolder 中找到您的控件。看看下面link:

To reference a control on the master page

如果仍然找不到控件,则 google 递归查找 ASP.NET 控件。