일반적인 링크의 경우, runat="server"속성을 붙여주면 마스터페이지의 경로에 따라 페이지 경로가 자동 재지정된다.
<a href="Default.aspx" runat="server">home</a>

object 요소에 포함된 param 요소의 value값이나 embed 요소의 src 속성 등 runat="server"로 변환이 안 되는 경우에는 [http]Control.ResolveClientUrl메서드를 활용하면 된다.
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="100" height="100" style="line-height:0;"> <param name="movie" value="<%=ResolveClientUrl("flash/flash.swf")%>" /> <param name="quality" value="high" /> <param name="wmode" value="transparent" /> <embed src="<%=ResolveClientUrl("flash/flash.swf")%>" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="100" height="100" wmode="transparent"/> </object>

자바스크립트 JS 파일에 포함된 링크의 경우에는, 페이지의 현재 위치를 나타내는 변수를 지정하여 활용하면 된다.

  • 헤더의 내용 :
    <script type="text/javascript"> var siteRoot = "<%=ResolveClientUrl("./") %>"; </script> <script src="<%=ResolveClientUrl("common/flash.js")%>" type="text/javascript"></script>
  • js파일의 내용 :
    function goToSub1() { location.href =siteRoot+"sub/Sub1.aspx"; } //...

최상위 페이지가 하나밖에 없을 경우 자바스크립트만으로 처리하는 방법도 있다. 그러나 이 방법은 유연하지 못해 쓰지 않는 것이 좋을 것 같다.
if (document.URL.indexOf("Default.aspx") == -1) { siteRoot= "../"; } else { siteRoot= ""; } function goToSub1() { location.href =siteRoot+"sub/Sub1.aspx"; }

마스터 페이지에서 Head 태그의 URL 재지정에 관하여는 ASP.NET/Head를 참고하라.
powered by Moniwiki | themed by clockoon
last modified 2009-01-07 07:03:12
Processing time 0.5174 sec