아래와 같은 마스터페이지를 만들었다고 하자.

//... <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>TITLE1</title> <link href="common/common.css" rel="stylesheet" type="text/css" /> <script src="common/header.js" type="text/javascript"></script> <asp:ContentPlaceHolder ID="head" runat="server"> </asp:ContentPlaceHolder> </head> //...

그리고 아래와 같은 디렉터리 구조를 가진다고 하자.

  • Master.master
  • Default.aspx
  • common
    • common.css
    • common.js
  • subs
    • Sub1.aspx

이 마스터페이지를 Default.aspx에서 불러오면 문제가 없겠지만, subs/Sub1.aspx에서 사용한다면 문제가 생길 것이다. 경로가 바뀌면 common이하의 파일들이 정상적으로 불러지지 않기 때문이다. 이때 head 태그에
<head runat="server">
와 같이 지정해주면 head 태그 블록이 HtmlHead 컨트롤로 변환되면서 href 속성이 마스터페이지의 위치를 기준으로 상대 경로를 재설정해 준다.
<link href="../common/common.css" rel="stylesheet" type="text/css" /> <script src="common/header.js" type="text/javascript"></script>

하지만 문제가 남아있다. 스크립트 태그의 src 속성은 변환해주지 않기 때문이다. 여기에는 [http]Control.ResolveClientUrl메서드를 활용할 수 있다.

<script src="<%=ResolveClientUrl("header.js") %>" type="text/javascript"></script>

이렇게 변경하면 모든 링크가 상대경로로 바뀌어 있는 것을 볼 수 있을 것이다.

powered by Moniwiki | themed by clockoon
last modified 2009-01-07 02:12:45
Processing time 0.4165 sec