Вот пример выполнения именно того, что вы просите с помощью CSS:
http://hicksdesign.co.uk/journal/highlighting-current-page-with-css
Этого можно добиться, используя статическое именование идентификаторов в своих элементах управления (вместо того, чтобы ASP.NET присваивал значение идентификатора каждому элементу управления).
EDIT:
Чтобы это работало с главной страницей, измените тег <body>
на главной странице на:
<body runat="server" clientidmode="Static" id="MasterBody">
Затем в Page_Load каждой страницы вы можете перезаписать идентификатор для каждой страницы (главная страница в моем примере имеет тип SiteMaster
):
protected void Page_Load(object sender, EventArgs e)
{
Control c = Page.Master.FindControl("MasterBody");
if (c != null)
{
c.ID = "Page1";
}
}
Обновление (2):
Я попытался запустить пример Фарзина, но он, похоже, не сработал, поэтому вот что я смог проверить, сработало ли для меня (вам не понадобится Page_Load
с того момента на ваших страницах контента):
Site.Master
<asp:Menu ID="NavigationMenu" ...>
<StaticSelectedStyle CssClass="selected" />
...
</asp:Menu>
Site.master.cs
protected void Page_Load(object sender, EventArgs e)
{
foreach (MenuItem item in NavigationMenu.Items)
{
item.Selected = Page.ResolveUrl(item.NavigateUrl).ToLowerInvariant() == Request.Path.ToLowerInvariant();
}
}
Стили / site.css
div.menu ul li a.selected
{
/* put your style definition here */
}