2015년 8월 18일 화요일

C# WebForm : 마스터페이지가 적용되지 않은 페이지에 마스터 페이지 적용하기

.Net 으로 사이트를 만들다 보면 마스터 페이지를 만들어 공통모듈로 흔히 사용한다.
반복되는 작업을 줄여주고 사이트를 규격화 하다 보니 많이 쓰인다.

그런데, 기존에 작업된 페이지가 있다.


그런데, 이 페이지는 마스터 페이지를 적용하기 않고 페이지를 만들었다.
그럼, 마스터페이지가 적용된 사이트를 만들려면 이 페이지는 포기 해야 하나?

일반적으로는 마스터 페이지가 적용된 페이지를 만들려면...


이렇게 마스터페이지 사용에 체크하고 만들어야 하지만...

사실 저 단계 거치지 않아도 상관 없다.
기존에 마스터 페이지를 사용하지 않던 페이지도 간단한 수정으로 얼마든지 마스터 페이지를 적용할 수 있으며, 다른 마스터페이지로 바꾸는것도 간단하다.
BeHind 코드 쪽에는 아무런 수정을 하지 않아도 된다.

일단, 테스트를 위해 마스터 페이지를 하나 만듬.


이게 기본적으로 만들어지는 마스터페이지.
다른건 그다지 신경 쓰지 않아도 되고, 중요한 것은, "ContentPlaceHolder" 의 위치다.
저 위치에 마스터페이지를 사용하는 페이지들의 소스가 적용된다.
ASP 의 경우를 생각하면 "#Include" 시키는 위치로 생각하면 된다.


마스터 페이지가 적용되었는지 표시가 나야하니, 마스터 페이지를 조금 편집.
"ContentPlaceHolder" 의 위치를 잘 신경써야 한다.


이게 마스터 페이지를 적용시킬 페이지.
이 페이지에서 마스터 페이지에 이미 있는 항목을 다 제거 하면 된다.


저기 선택된 영역의 부분을 제거 해야 하는데, 주의 해야 할 점은 다른건 몰라도, "<from>" 태그만은 반드시 지워야 한다.
.Net Webform 은 원칙상 단 하나의 "<from>" 태그만 존재 해야 한다.

<head> 태그도 지워야 하고, 스타일 시트는 마스터 페이지에 넣거나, 그게 싫다면 그냥 본문에 집어 넣어도 된다.

그리고 페이지 헤더에 마스터 페이지 위치를 기록한다.
이걸 대충 편집하면...


요렇게 됨.


주의 할 점은, 서브 페이지에서 마스터 페이지에 넣을 내용을 "Content" 태그로 감싸고,  "ContentPlaceHolderID" 에 지정되어 있는 ID 가 ...


마스터 페이지의 "ContentPlaceHolder" 엥 지정되어 있는 아이디랑 맞춰주는 것만 주의 하면 된다.

이렇게 하면...


손쉽게 기존 소스에 마스터 페이지를 적용할 수 있다.
이렇게만 해줘도 되지만, 조금더 소스를 정리 할려면...


"head ContentPlaceHolder" 를 이용해서 스타일 시트를 정리 할 수 있다.
당현히 저것은 마스터 페이지의 "head ContentPlaceHolder" 의 위치에 삽입된다.

이걸 이용하면 각 페이지 별로 각기 다른 스타일 시트및 자바스크립트를 적용 할 수도 있다.