ASP.Net MVC의 마스터 페이지 제목
-
19-09-2019 - |
문제
페이지 제목을 관리하기 위해 ContentPlaceHolder를 가져오는 마스터 페이지가 있습니다.
<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /> </title>
그리고 내가 쓰는 페이지마다
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">Some Title Here
</asp:Content>
이제 내 고객은 모든 페이지의 제목을 제거하고 마스터 페이지에 유지하도록 요청하지만 나중에 요구 사항이 있는 경우 데이터를 삽입할 수 있도록 모든 페이지와 마스터 페이지에서 콘텐츠 자리 표시자 코드를 제거하지 않습니다.그래서 내 문제는 마스터 페이지와 페이지에서 제목을 제거하지 않고 마스터 페이지에 제목을 넣을 수 없다는 것입니다. 그렇다면 이 상황을 어떻게 처리할 수 있습니까?
해결책
고마워요 여러분..해결책이 있어요
마스터 페이지 내에서 제목의 일부를 설정하려는 경우.예를 들어, 모든 페이지의 제목이 접미사 “ – MySite”로 끝나기를 원할 수 있습니다.
이것을 시도한다면(-MySite가 붙어 있음을 주목하세요):
<%@ Master ... %>
<html>
<head runat="server">
<title>
<asp:ContentPlaceHolder ID="titleContent" runat="server" /> - MySite
</title>
</head>
페이지를 실행하면 – MySite가 렌더링되지 않은 것을 확인할 수 있습니다.이는 HtmlHead 컨트롤의 특이한 점인 것 같습니다.이는 HtmlHead 컨트롤 내의 제목 태그가 이제 그 자체로 컨트롤이기 때문입니다.
수정은 매우 간단합니다.이와 같이 LiteralControl에 텍스트를 추가하십시오.
<%@ Master ... %>
<html>
<head runat="server">
<title>
<asp:ContentPlaceHolder ID="titleContent" runat="server" />
<asp:Literalrunat="server" Text=" - MySite" />
</title>
</head>
다른 팁
페이지 제목을 재정의하는 좋은 솔루션을 원하는 경우:
System.Web.Mvc.ViewPage에서 상속되는 고유한 클래스를 만듭니다.
보기 페이지가 해당 클래스에서 상속되도록 하세요.
다음과 같은 작업을 수행하는 새 클래스에 Page_Load 핸들러를 작성합니다.
Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Me.Title = "Company Name | " + Page.Title
End Sub
또한 제목을 변경하기 위해 콘텐츠 자리 표시자가 필요하지 않습니다.<head> 태그는 이미 runat 서버 컨트롤입니다.페이지 로드(또는 이전 이벤트)에서 Page.Title을 설정하면 정상적으로 작동합니다.
이 작업을 수행하기 위해 마스터 페이지에 runat 서버 스크립트 태그를 넣을 수도 있습니다.
가장 쉬운 방법:
현재를 이동 ContentPlaceHolder
HTML 어딘가에 넣고 <asp:PlaceHolder runat="server" visible="false"/>
.나중에 필요할 때 ContentPlaceHolder를 다시 뒤로 이동하면 됩니다.
마스터 페이지의 OnPreRender 이벤트를 사용하여 제목을 설정하고 각 페이지에 설정된 내용을 재정의합니다.
마스터 페이지의 ContentPlaceHolder에 Visible=false 속성을 추가하면 어떨까요?
나는 이것이 당신의 상황을 처리하는 가장 쉬운 방법이라고 생각합니다.
즐거운 코딩하세요.