RadMenu скрыть подменю
Я использую Радмену. Мне нравится скрывать элемент подменю.
Меню выглядит следующим образом. Обратите внимание, что Car - это главное меню, а Dodge, Toyota и Honda - это подменю.
Автомобили - Додж - Тойота - Хонда
Я пытаюсь сделать что-то вроде следующего, но не сработает:
protected void RadMenu1_ItemCreated(object sender, Telerik.Web.UI.RadMenuEventArgs e)
{
if (e.Item is RadMenuItem)
{
if (e.Item.Parent != null && e.Item.Parent is RadMenuItem)
{
if (e.Item.Menu.FindItemByText("Honda"))
{
e.Item.Visible = false;
}
}
}
}
2 ответа
Пожалуйста, попробуйте с приведенным ниже фрагментом кода и дайте мне знать, если какие-либо проблемы.
ASPX
<div>
<telerik:RadScriptManager ID="RadScriptManager1" runat="server"></telerik:RadScriptManager>
<telerik:RadMenu ID="RadMenu1" runat="server" OnPreRender="RadMenu1_PreRender">
<Items>
<telerik:RadMenuItem Text="cars">
<Items>
<telerik:RadMenuItem Text="Honda"></telerik:RadMenuItem>
<telerik:RadMenuItem Text="Toyota"></telerik:RadMenuItem>
</Items>
</telerik:RadMenuItem>
</Items>
</telerik:RadMenu>
</div>
ASPX.CS
protected void RadMenu1_PreRender(object sender, EventArgs e)
{
foreach (RadMenuItem item in (sender as RadMenu).Items)
{
if (item.Items.Count > 0)
{
foreach (RadMenuItem citem in item.Items)
{
if (citem.Text != "Honda")
{
citem.Visible = false;
}
}
}
}
}
// Hide top menu cars
protected void RadMenu1_PreRender(object sender, EventArgs e)
{
foreach (RadMenuItem item in (sender as RadMenu).Items)
{
if (item.Items.Count > 0)
{
if(item.Text == "cars")
{
item.Visible = false;
}
foreach (RadMenuItem citem in item.Items)
{
if (citem.Text != "Honda")
{
citem.Visible = false;
}
}
}
}
}
Мне восемь лет, но у меня есть немного другое решение, основанное на решении, предоставленном @Jayesh. На странице ASPX вообще ничего нет, поскольку событие обрабатывается в Page_Load.
ASPX.CS:
protected void Page_Load(object sender, EventArgs e)
{
if(Page.IsPostBack)
{
return;
}
Telerik.Web.UI.RadMenu topLevel = RadMenu1;
foreach(RadMenuItem item in topLevel.Items)
{
LookForRadMenuItems(item);
}
}
private void LookForRadMenuItems(RadMenuItem sender)
{
if(sender.Text == "Honda")
{
sender.Visible = false;
}
foreach(RadMenuItem item in sender.items)
{
LookForRadMenuItems(item);
}
}
Это позволит найти все экземпляры «Honda» во всех меню и подменю и скрыть их. Вы можете сделать его более гибким, проверив, является ли текст.contains
Вместо этого «Honda», например, или создание словаря или хеш-таблицы для поиска более чем одного элемента одновременно.
Мое конкретное приложение на самом деле создано на VB.NET, поэтому вот его эквивалент:
ВБ.НЕТ
Protected Sub Page_Load(sender As Object, e As System.EventArgs)
If Page.IsPostBack Then Exit Sub
Dim topLevel As Telerik.Web.UI.RadMenu = RadMenu1
For Each item As RadMenuItem In topLevel.Items
LookForRadMenuItems(item)
Next
End Sub
Private Sub LookForRadMenuItems(sender as RadMenuItem)
If sender.Text = "Honda" Then
sender.Visible = false
End If
For Each(item As RadMenuItem In sender.Items)
LookForRadMenuItems(item)
Next
End Sub