ASP.NET에서 상대경로 활용하기 ASP.NET
2009.02.04 22:45 EDIT
- CSS를 활용한다. 별도의 CSS파일을 사용하면 url() 함수는 CSS파일을 포함하고 있는 HTML과는 상관없이 CSS파일을 기준으로 경로를 처리한다. 예를들어, 다음과 같은 경로를 생각해 보자.
그리고 contents1.aspx는 common.css를 불러들이고 있다고 하면, common.css 파일 내부에는 다음과 같이 선언할 수 있다./contents/sub1/sub1.aspx /images/picture1.jpg /styles/common.css
#logo{background:url(../images/picture1.jpg)}
- 틸드(~, tilde)를 활용한다. 유닉스에서 홈 디렉터리를 나타내는 ~ 표시가 ASP.NET 컨트롤들에게는 응용 프로그램의 루트로 인식이 되기 때문이다. 다음 예제에서 img 태그에도 runat="server"를 삽입한 것에 유의하자. 이들은 서버 컨트롤이기 때문에 컴파일 과정에서 실제 경로로 변환된다.
응용 프로그램의 루트는 보통 web.config이 있는 위치이나, web.config이 반드시 응용프로그램 루트에서만 사용되지 않는다는 점에 유의해야한다.<img runat="server" src="~/images/picture1.jpg" /> <asp:Image runat="server" ImageUrl="~/images/picture.jpg" />
- Page/Control의 AppRelativeVirtualPath 속성을 활용한다. 이 속성을 사용하면 페이지 내에서 ~/ 값이 가리키는 응용 프로그램 루트를 다른 것으로 인식시킬 수 있다. 이 변수는 특히 개발할 웹 사이트가 IIS에서 응용 프로그램으로 선언되지 않고 하부 디렉터리로만 들어갈 경우 유용하다.
이와 같이 선언하면, ~/ 값은 /WebSite/ 경로를 가리키게 된다.protected override void Page_Load(object sender, EventArgs e) { Page.AppRelativeVirtualPath = "/WebSite/"; }
- 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" />
물론 이 경우에도 적용 대상은 ASP.NET 서버 컨트롤에 국한된다.protected override void Page_Load(object sender, EventArgs e) { Page.AppRelativeTemplateSourceDirectory = "~/images/"; }
- Tag :
- C#, ASP.NET, 상대경로, relative path, tilde