在后面的内容页代码中获取 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 控件。
我现在正在使用 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 控件。