2010-12-31 3 views
15

ASP.NET 상대 경로와 혼동 스럽습니다. 도와 주실 수 있습니까? 내가 참조 링크 라벨 준 마스터 페이지에서ASP.NET 상대 경로

다음 ASP.NET 공식 문서에서

<a href="~/Account/Login.aspx">Login</a> 

내가 읽어

다음은 루트 레벨을 지정하는 데 사용되는 ~ 연산자를 보여줍니다 이미지 서버 컨트롤을 사용할 때 이미지에 대한 상대 경로이 예제에서는 이미지가 웹 사이트의 어느 위치에 있는지에 관계없이 웹 응용 프로그램 루트 인 바로 아래에있는 Images 폴더에서 이미지 파일을 읽습니다.

/Account/~/Account/Login.aspx 

이유 : 나는/계정 폴더의 페이지에서 링크를 클릭하면 로그인 마크 업으로

<asp:image runat="server" id="Image1" ImageUrl="~/Images/SampleImage.jpg" />

는 내가로 리디렉션 해요? WHY? h

답변

27

서버 컨트롤이 아니라 마크 업에서 직접 사용하기 때문입니다. 이처럼 간단 뭔가를 수정해야합니다 : 그것은 응용 프로그램의 기본 디렉토리의 서버 경로에 대한 참조이기 때문에

<a runat="server" href="~/Account/Login.aspx">Login</a> 

기본적으로 ~ 경로 참조는, 서버에 번역 될 필요가있다. 일반 HTML 마크 업은 서버에서 처리되지 않고 그대로 클라이언트에게 전달됩니다. 서버 처리 코드 만 ~ 경로를 해석 할 경로로 변환합니다.

+7

또는를 사용합니다. –

+0

그래, 그렇게 할거야. 마찬가지로' '컨트롤을 사용합니다. 개발자가 사용하고자하는 것에 따라 다양한 접근 방법이 있습니다. – David

+0

감사합니다. David & Jamie. 둘 다 행복한 새해. –

0

ASP.NET 서버 컨트롤 내의 URL을 참조 할 때 ~를 사용할 수 있습니다. <a> 태그에서이 태그를 사용하고 있습니다.이 태그는 ~에 대해 알지 못하는 단순한 html 태그입니다. ">Login 당신에게 동일한 결과를 제공한다 : ' "/Images/SampleImage.jpg"'대신

+1

페이지에서 루트 "/"를 사용하는 것이 좋지 않은 점은 환경에 따라 다를 수 있다는 것입니다.예를 들어 앱이 개발 환경의 XP의 가상 디렉토리와 Server03의 프로덕션 서버의 웹 루트에있는 경우 다른 결과가 나옵니다. –

+1

"/Images/SampleImage.jpg"는 상대 경로가 아닙니다. 이 접근법은 응용 프로그램의 기본 경로가 서버 루트와 일치하는 경우에만 작동합니다. 그게 사실 일 때도 있지만, 보장 된 것이 아니며, 실제로 무엇이 요구되었는지도 아닙니다. – David

+0

당신 말이 맞아요. 그것은 쉬운 대답이었다. 다른 사람이 더 잘 작동 할 ResolveClientUrl을 게시했습니다. –

1

이 명령을 사용

<a href="<%=Page.ResolveUrl("~/product.aspx")%>" >Link To Products</a>