내비게이션 ID 변경을위한 프로그램 솔루션은 현재 페이지 ASP.Net을 강조하기 위해
-
06-07-2019 - |
문제
Visual Studio 2008 및 ASP.NET 3.5와 함께 웹 사이트를 작성하고 있습니다. 레이아웃을 단순화하고 컨텐츠 및 레이아웃이 아닌 콘텐츠 페이지를 유지하기 위해 마스터 페이지가 설정되어 있습니다.
내비게이션이 목록입니다. CSS는 막대처럼 보입니다. 막대의 페이지를 강조하려면 목록 항목이 다음과 같이 보일 필요가 있습니다. <li id="current">
. 사용하고 싶지 않습니다 <asp:ContentPlaceHolder>
내가 그것을 피할 수 있다면. 이것을 달성하기 위해 각 페이지 (또는 마스터 페이지에만 추가 할 수있는 코드가 있습니까? <asp:ContentPlaceHolder>
'에스?
해결책
페이지 섹션이라는 마스터 페이지에 속성 추가
public string PageSection { get; set; }
콘텐츠 페이지 상단에 MasterType 페이지 지시문 추가
<%@ MasterType VirtualPath="~/foo.master" %>
뒤에 콘텐츠 페이지 코드에서 마스터 페이지의 페이지 섹션 속성을 설정하십시오.
Master.PageSection = "home";
마스터 페이지에서 본문 태그를 서버 태그로 만듭니다.
<body ID="bodyTag" runat="server">
뒤의 마스터 페이지 코드에서 해당 속성을 사용하여 바디 태그에서 클래스를 설정하십시오.
bodyTag.Attributes.Add("class", this.PageSection);
각 NAV 항목에 고유 한 ID 속성을 제공하십시오.
CSS에서 현재 페이지 클래스를 기반으로 NAV 항목 표시를 변경하십시오.
.home #homeNavItem,
.contact #contactNavItem
{
color: #f00;
}
다른 팁
Web.sitemap 파일 사용을 고려해 보셨습니까? 정말 쉽게 만듭니다. 사이트 맵 파일이 다음과 같이 보인다면 ...
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode>
<siteMapNode url="~/Default.aspx" title="Home" description="" />
<siteMapNode url="~/Blog.aspx" title="Blog" description="" />
<siteMapNode url="~/AboutUs.aspx" title="AboutUs" description="" />
</siteMapNode>
</siteMap>
... 그런 다음 마스터 페이지에서 원하는 결과를 얻을 수 있습니다.
<asp:SiteMapDataSource ID="sitemapdata" runat="server" ShowStartingNode="false" />
<ul id="navigation">
<asp:Repeater runat="server" ID="navrepeater" DataSourceID="sitemapdata">
<ItemTemplate>
<li class="<%# SiteMap.CurrentNode.Equals(Container.DataItem) ? "activenav" : "inactivenav" %>"><a href="<%# DataBinder.Eval(Container.DataItem, "url") %>"><%# DataBinder.Eval(Container.DataItem, "title") %></a></li>
</ItemTemplate>
</asp:Repeater>
</ul>
현재 페이지의 LI에는 "ActiveNav"클래스 (또는 사용하기로 결정한 것)가 있고 다른 페이지에는 "inactivenAv"클래스가 있습니다. 그에 따라 CSS를 작성할 수 있습니다. 이것이 제가 사이트에서 사용하는 기술이며 훌륭하게 작동합니다.
더 나은 의미 론적 일치이며 동일한 클래스 또는 ID를 어디에서나 사용하여 내비게이션을 유지하기 위해 설정하기가 더 쉬운 변수 일 가능성이 높으며, 신체 요소의 ID를 일치 시키도록 변경합니다.
<li id="homeNav">home</li>
<li id="blogNav">blog</li>
그리고 각 페이지에서 ...
<body id="home">
<body id="blog">
그리고 CSS에서 :
#home #homeNav {background-image:url(homeNav-on.jpg);}
#blog #blogNav {background-image:url(blogNav-on.jpg);}
Contentplaceholder의 사용 또는 비 사용은 ID = "Current"설정이있는 요소에 영향을 미치지 않습니다.
메뉴 구성 요소가 생성 될 때 ID = "current"를 올바르게 추가하도록 메뉴 구성 요소를 렌더링 할 때 마스터 페이지의 코드 비드에서 JavaScript 함수 또는 다른 방법을 살펴 봐야합니다.
MasterPage 코드 클래스에서 보호 된 문자열 속성을 만드는 것은 어떻습니까? onload를 대체 :
protected string _bodyId;
protected override void OnLoad(EventArgs e)
{
_bodyId = "your css id name";
}
그런 다음 MasterPage ASPX에서 :
<body id="<%= _bodyId %>">
그런 다음 CSS를 엉망으로 만들 필요가 없습니다. 특히 CSS가 디자인 대행사에서 온 경우 유용합니다.
CSS 클래스를 추가하여 배경을 변경하여 jQuery를 사용하여 달성 한 방법은 다음과 같습니다.
$("ul.nav > li > a:contains('<%= SiteMap.CurrentNode.ParentNode.Title %>')").addClass("navselected");
".nav
" 안에 ul.nav
(jQuery)는 UL 태그에 적용되는 CSS 클래스입니다.
:contains
메뉴에 인쇄 된 ParentNode 제목이있는 ul-> li-> a 내의 모든 "a"태그/요소의 내용을 확인하는 데 도움이됩니다 ...
발견 된 경우, navSelected라는 이름의 CSS 클래스를 특정 ul-> li-> 태그/요소에 적용합니다.
안부, Minesh Shah
시스템 플러스 Pvt. 주정부
www.systems-plus.com
나는 이것을 달성하기 위해 JavaScript를 사용합니다. CSS에서 #Current를 클래스 (.Current)로 변경 한 다음 작성한 각 목록에 ID가 있습니다. 그런 다음 registerStartUpscript를 사용하여 적절한 ListItem을 가져 와서 전류 스타일을 할당하는 JavaScript 메소드를 호출하십시오. 프로토 타입을 사용하면 $ ( 'mypageli')처럼 보입니다. ClassName = 'current'.