Установить класс CSS «выбранный» в меню ASP.NET родителей и их детей? - PullRequest
2 голосов
/ 05 февраля 2012

У меня есть следующий элемент управления меню, встроенный в файл Site.master :

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal" RenderingMode="List">
    <Items>
        <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home" />
        <asp:MenuItem NavigateUrl="~/TechServices.aspx" Text="Tech Services"/>
        <asp:MenuItem NavigateUrl="~/HumanResources.aspx" Text="Human Resources"/>
        <asp:MenuItem NavigateUrl="~/Marketing.aspx" Text="Marketing"/>
        <asp:MenuItem NavigateUrl="~/DocumentControl.aspx" Text="Document Control"/>
        <asp:MenuItem NavigateUrl="~/IT.aspx" Text="Information Tech"/>
    </Items>
</asp:Menu>

Чтобы установить атрибут класса CSS selected Я использую следующий код C #:

protected void Page_Load(object sender, EventArgs e) {
    string thispage = this.Page.AppRelativeVirtualPath;
    int slashpos = thispage.LastIndexOf('/');
    string pagename = thispage.Substring(slashpos + 1);

    foreach (MenuItem mi in NavigationMenu.Items) {
        if (mi.NavigateUrl.Contains(pagename)) {
            mi.Selected = true;
            break;
        }
    }
}

Код выше прекрасно работает.Однако эти страницы теперь содержат подстраницы (дочерние), и я хотел бы, чтобы родительские страницы сохраняли свой атрибут "Выбранный" CSS при доступе к одной из их дочерних страниц.

Я также создал Web.sitemap Файл для организации всех родительских и их дочерних страниц.Тем не менее, я в курсе того, как использовать Web.sitemap, чтобы помочь вышеуказанной функции C #, чтобы помочь родительскому меню сохранить свой атрибут CSS "selected" класса.Я не уверен, нужен ли мне файл Web.sitemap для этой цели?Родительская и дочерняя логика доступны только в файле Web.sitemap.

1 Ответ

0 голосов
/ 05 февраля 2012

Как только вы найдете MenuItem, чтобы выбрать просто пройти вверх и выбрать всех родителей. Вот некоторый псевдокод:

MenuItem miP = mi.Parent;
while (miP != null) 
{ 
  miP.Selected = true;
  if (miP.Parent == null)
   break;
  else
   miP = miP.Parent;
}
...