У меня есть меню, использующее карту сайта, которая находится на моей главной странице. Я хочу отключить определенные пункты меню в зависимости от пользователя. Ни в коем случае я не хочу спускаться с кроличьей дыры в ролях MS.Создание пунктов меню, невидимых с главной страницы
У меня есть следующий Site.Master:
<div class="clear hideSkiplink">
<asp:Menu ID="MainMenu" runat="server" DataSourceID="SiteMapDataSource1"
Orientation="Horizontal"
CssClass="menu"
StaticDisplayLevels="1"
StaticMenuItemStyle-VerticalPadding="2"
StaticMenuItemStyle-HorizontalPadding="10"
StaticMenuItemStyle-Font-Name="Verdana"
StaticMenuItemStyle-Font-Size="12pt"
StaticHoverStyle-BackColor="#707070"
StaticHoverStyle-ForeColor="#550000"
DynamicMenuStyle-HorizontalPadding="2"
DynamicMenuStyle-VerticalPadding="2"
DynamicMenuStyle-BackColor="#E0E0E0"
DynamicMenuStyle-ForeColor="#FFFFFF"
DynamicMenuStyle-BorderWidth="1"
DynamicMenuStyle-BorderColor="#C0C0C0"
DynamicMenuItemStyle-VerticalPadding="2"
DynamicMenuItemStyle-Font-Name="Verdana"
DynamicMenuItemStyle-Font-Size="9pt"
DynamicMenuItemStyle-ForeColor="#FFFFFF"
DynamicHoverStyle-BackColor="#707070"
DynamicHoverStyle-ForeColor="#550000" />
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="False" />
У меня есть Web.sitemap похожее на следующее:
<siteMapNode >
<siteMapNode url="default.aspx" title="Home" description="" />
<siteMapNode url="default.aspx?p=0" title="Admin" description="">
<siteMapNode url="default.aspx?p=55" title="thing1" description="" />
<siteMapNode url="default.aspx?p=56" title="thing2" description="" />
</siteMapNode>
<siteMapNode url="default.aspx?p=1" title="Thing3" description="">
</siteMapNode>
<siteMapNode url="default.aspx?p=2" title="Thing4" description="">
</siteMapNode>
</siteMapNode>
В Site.Master.cs я попытался добавить следующий код под обе Page_Load И под MainMenu_MenuItemDataBound:
Response.Write(MainMenu.Items.Count.ToString());
Когда я положил его под MainMenu_MenuItemDataBound, это не имеет никакого эффекта. Когда я положил его под Page_Load(), он печатает нуль, даже если я могу ПОСМОТРЕТЬ меню, отображаемое правильно, и у него есть элементы!
Факты: Меню существует. В меню есть элементы. Меню и элементы отображаются правильно, насколько это возможно.
Я хочу войти и, например, сделать элемент с заголовком «Admin» невидимым (вместе с его подменю) - я хотел бы удалить его, но либо сделать его невидимым, либо отключить его было бы хорошо. Я пробовал различные заклинания с участием MainMenu.FindItem ... какой метод, похоже, не имеет никакого отношения к поиску элементов. Это когда я заметил, что причина, по которой он не находит какие-либо предметы, заключается в том, что количество элементов равно нулю (хотя я вижу элементы).
Решение в соответствии с Дейвом D ниже, но также необходимо добавить
OnMenuItemDataBound="MainMenu_MenuItemDataBound"
тэгу MainMenu.
Не работает. Насколько я могу судить, MainMenu_MenuItemDataBound никогда не вызывается. – elbillaf
AH! Секрет в том, что мне нужно было добавить OnMenuItemDataBound = «MainMenu_MenuItemDataBound» в тег для MainMenu. Поэтому ваше решение действительно работает. – elbillaf