문제

페이지 제목을 관리하기 위해 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 속성을 추가하면 어떨까요?

나는 이것이 당신의 상황을 처리하는 가장 쉬운 방법이라고 생각합니다.

즐거운 코딩하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top