ASP.NET에서 상대경로 활용하기 ASP.NET

 

  1. CSS를 활용한다. 별도의 CSS파일을 사용하면 url() 함수는 CSS파일을 포함하고 있는 HTML과는 상관없이 CSS파일을 기준으로 경로를 처리한다. 예를들어, 다음과 같은 경로를 생각해 보자.

    /contents/sub1/sub1.aspx
    /images/picture1.jpg
    /styles/common.css
    
    그리고 contents1.aspx는 common.css를 불러들이고 있다고 하면, common.css 파일 내부에는 다음과 같이 선언할 수 있다.

    #logo{background:url(../images/picture1.jpg)}
    

  2. 틸드(~, tilde)를 활용한다. 유닉스에서 홈 디렉터리를 나타내는 ~ 표시가 ASP.NET 컨트롤들에게는 응용 프로그램의 루트로 인식이 되기 때문이다. 다음 예제에서 img 태그에도 runat="server"를 삽입한 것에 유의하자. 이들은 서버 컨트롤이기 때문에 컴파일 과정에서 실제 경로로 변환된다.

    <img runat="server" src="~/images/picture1.jpg" />
    <asp:Image runat="server" ImageUrl="~/images/picture.jpg" />
    
    응용 프로그램의 루트는 보통 web.config이 있는 위치이나, web.config이 반드시 응용프로그램 루트에서만 사용되지 않는다는 점에 유의해야한다.

  3. Page/Control의 AppRelativeVirtualPath 속성을 활용한다. 이 속성을 사용하면 페이지 내에서 ~/ 값이 가리키는 응용 프로그램 루트를 다른 것으로 인식시킬 수 있다. 이 변수는 특히 개발할 웹 사이트가 IIS에서 응용 프로그램으로 선언되지 않고 하부 디렉터리로만 들어갈 경우 유용하다.

    protected override void Page_Load(object sender, EventArgs e)
    {
        Page.AppRelativeVirtualPath = "/WebSite/";
    }
    
    이와 같이 선언하면, ~/ 값은 /WebSite/ 경로를 가리키게 된다.

  4. Page/Control의 AppRelativeTemplateSourceDirectory 속성을 활용한다. 이 속성으로 현재 컨트롤의 (응용 프로그램 루트에 대한)상대 경로를 지정할 수 있다. 예컨대 위의 예제 가운데 sub1.aspx에서 picture1.jpg에 접근하는 방법은 ~/images/picture.jpg 혹은 ../../images/picture.jpg 이지만, 다음과 같은 형태로 바로 쓰는 것도 가능하다.

    <img runat="server" src="picture1.jpg" />
    <asp:Image runat="server" ImageUrl="picture.jpg" />
    

    protected override void Page_Load(object sender, EventArgs e)
    {
        Page.AppRelativeTemplateSourceDirectory = "~/images/";
    }
    
    물론 이 경우에도 적용 대상은 ASP.NET 서버 컨트롤에 국한된다.

Tag :
, , , ,

Leave Comments