웹 페이지 제목에 대한 단일 지점 처리 기술
최근 ms가 .net2.0에서 제공하는 페이지 탐색 구성 요소인 sitemappath를 사용할 때 페이지 제목 비동기화 문제를 해결하는 간단하고 편리한 메커니즘이 생각나서 공유하고 싶습니다. 모두와 함께요.
현재 문제:
1. 일반적으로 전체 웹 사이트에는 aspx 페이지 제목에 대한 통합 저장 위치가 없습니다. 각 페이지의 페이지 제목은 페이지의 aspx 파일에 직접 하드 코딩되거나 aspx.cs(추가 제목)를 통해 동적으로 작성됩니다. 1.1 Control에도 추가되어 Page.Title 속성은 2.0에서도 사용할 수 있습니다), 전체 사이트에 웹 페이지가 많으면 이 반복적인 논리 코드를 여러 번 작성해야 하므로 보기에 매우 보기 흉하고 불가능합니다. 타이틀 정보가 사용되는 다른 장소에서 동기화됩니다.
2. 다국어 지원을 위해 모든 페이지 제목을 리소스(또는 xml) 파일에 넣어도 Tongyi 프로그램 코드, 즉 페이지 제목이 사용되는 위치를 통해 제목을 로딩하는 데 문제가 있습니다. 페이지는 (페이지 탐색 컨트롤)과 같은 제목 영역에서 이러한 컨트롤이 리소스 파일(또는 xml)로부터 제목 정보를 얻을 수 있도록 하는 방법도 골치 아픈 문제입니다.
달성할 목표:
1. 웹페이지 제목과 관련된 모든 문제를 전체 웹사이트의 메인 템플릿에서 한번에 해결합니다. 모든 웹사이트에서 사용되는 제목은 Web.sitemap(다국어 지원 가능)에 유지되므로 페이지의 탐색 정보도 유지됩니다. 동시에. .
2. (사용자 로그인 | Qisi 소프트웨어)와 같이 팝업 양식 제목의 각 웹사이트 제목 뒤에 사이트 이름을 자동으로 추가하지만, 페이지 탐색 컨트롤에서 제목을 참조하면 사이트 이름이 표시되지 않습니다. (홈>회원센터>사용자 로그인)과 같습니다.
3. aspx.cs 프로그램에서 page.Title 속성을 참조하는 경우 사이트 이름이 있을 수 없습니다. 예를 들어 페이지 제목 표시줄에는 (사용자 로그인 | Qisi 소프트웨어)가 표시되지만 일반에서는 page.Title 값이 참조됩니다. 페이지의 프로그램은 (사용자 로그인)입니다.
구체적인 구현 방법은 다음과 같습니다.
웹 사이트의 마스터 페이지에 다음 코드를 추가합니다.
protected void Page_Load(개체 전송자, EventArgs e)
{
if (!this.IsPostBack)
{
this.searchDescription.Content = this.SearchDescription;
this.searchKeywords.Content = this.SearchKeywords;
}
if(SiteMap.CurrentNode != null)
{
this.Page.Title = 사이트맵.CurrentNode.Title;
}
또 다른
{
this.Page.Title = "이 페이지 탐색은 Web.sitemap에서 구성되지 않았습니다.";
}
}
보호된 재정의 무효 렌더링(HtmlTextWriter 작가)
{
this.Page.Title = this.Page.Title + " | " + Keyss.WebFramework.ConfigManager.GetInstance().SiteName;
base.Render(작가);
}
설명하다:
1. (!this.IsPostBack){} 블록에서 페이지 판단이 구현되지 않는 이유는 view 상태를 page.Title에 저장할 수 없기 때문입니다. 이는 .net2.0의 작은 버그라고 생각합니다.
2. 렌더 메소드에서 title 속성을 다시 쓰는 이유는 렌더 메소드가 페이지 수명 동안 viewstate를 저장하지 않기 때문입니다. 페이지에서 작성된 페이지 제목 내용은 마스터 페이지에서만 유효합니다. 페이지 제목 렌더링을 담당합니다. 페이지의 렌더링 방법에서 제목을 변경해도 렌더링 결과에 영향을 미치지 않습니다.
출처: Qisi 소프트웨어 블로그