2011-09-13 2 views
4

글쎄, 내 제목이 약간 혼란 스럽다. 아래에 분명히 예를 들어 설명하겠습니다.jquery/javascript의 상대 경로 .. ../../에 틸드가있는 상대 경로를 렌더링하는 방법은 무엇입니까?

<asp:ImageButton ID="imgButton" NavigateUrl="~/Presentation/Resources/Images/addFile.png" runat="server" /> 

는 HTML, 제어 위

<input type="image" name="imgButton" id="imgButton" src="../../Resources/Images/addFile.png" style="border-width:0px;"> 

으로 렌더링됩니다 나는 그것이 "~" "../../".IT 자동 배열하는에서 SRC를 변환합니다 것을 알 수 파일 수준이됩니다. 이 렌더링되는 HTML에서,

불행하게도

~/프리젠 테이션/자원/이미지/PDF.png :

그래서 자바 스크립트에서, 나는 그것을이 URL을 사용하여 컨트롤을 설정하려면 내가 "~"와 "../../"상대 경로를 얻을 싶다면

내 질문은
<input type="image" name="imgButton" id="imgButton" src="~/Presentation/Resources/Images/addFile.png" style="border-width:0px;"> 

, 나는 무엇을 작성해야? 나는 이것을 시도했지만 그것을 얻을 수 없다. HTML을 렌더링하기 전에 서버에서 실행할 때

<script type="javascript"> 
document.getElementById("<%= imgButton.ClientID %>").src = 
"~/Presentation/Resources/Images/PDF.png"; 
</script> 

답변

9

이 시도 : http://weblogs.asp.net/joelvarty/archive/2009/07/17/resolveurl-in-javascript.aspx

을위한 마스터 페이지에서를 사이트,이를 넣어 :

<script type="text/javascript"> 
     var baseUrl = "<%= ResolveUrl("~/") %>"; 
</script> 

그런 다음 자바 스크립트 파일에서이 기능을 넣어 : 당신이 바로 마스터 페이지에서 함수를 놓치면서

function ResolveUrl(url) { 
    if (url.indexOf("~/") == 0) { 
     url = baseUrl + url.substring(2); 
    } 
    return url; 
} 

,하지만 당신 은 위해에 인텔리 센스를 얻을 수 없겠죠 나머지 코드. 이제 은 ~/right with javascript에서 ResolveUrl을 호출 할 수 있습니다.

왜 고객이 필요합니까? servercontrols (runat=server)를 사용하면 물결표를 사용하여 서버의 URL을 확인할 수 있습니다.

+0

감사합니다! 그것은 매력처럼 작동합니다! :) – DEN

+1

동적 HTML 컨트롤을 ~/url과 바인딩해야하기 때문에 필요합니다 – DEN

1

WebControls가 올바른 경로로 물결을 번역, 당신은 당신이 즉석에서 SRC를 변경하는 경우 jQuery를에 전체 경로 또는 상대 경로를 사용해야합니다.

당신은 루트 경로 예를 들어있는 페이지의 속성이 할 수 있습니다 : ApplicationRootURL과 같은 것을 수행

<script type="javascript"> 
document.getElementById("<%= imgButton.ClientID %>").src = 
"<%=ApplicationRootURL%>/Presentation/Resources/Images/PDF.png"; 
</script> 
1

VirtualPathUtility Class과이 정보를 msdn 약 ASP.NET project paths에 대해 살펴보십시오.

VirtualPathUtility.ToAppRelative 메서드가 아마도 당신이 찾고있는 것일 것입니다.VirtualPathUtility.ToAppRelative

애플리케이션의 가상 경로가 ToAppRelative 방법으로 전달되는 "MyApp를"가상 경로 "/myApp/sub/default.asp"이면

, 생성 애플리케이션 상대적 경로는 "~/sub/default.aspx"입니다.

다른 경로 형식간에 변환하는 방법에 대해 설명하고 예제를 제공합니다.

나는 브라우저의 자바 스크립트에서 리버스 엔지니어링 대신 서버 레벨에서 올바른 경로를 출력해야한다고 생각한다. 프로젝트를 재정렬하고 ASP를 변경하면 문제가 발생할 수 있습니다.

+0

처음 읽을 때 내 질문을 오해 한 이후로 제 대답을 편집했습니다. –

5

사실, 물결표와 URL은 방법에 절대 URL 덕분에 변환됩니다 :

<input type="image" name="imgButton" id="imgButton" src="<%=this.ResolveClientUrl("~/Resources/Images/addFile.png")%>" style="border-width:0px;"> 

(이 실제로 당신을 위해 자동으로 수행됩니다 : ResolveURL and ResolveClientURL

따라서 당신은이 작업을 수행 할 수 있어야한다 HyperControl과 같은 웹 컨트롤)

두 가지 방법의 큰 차이점은 사용자 컨트롤을 사용할 때 발생합니다. 이 경우 URL은 사용자 정의 컨트롤이있는 폴더와 관련된 URL을 나타내며, 다른 경우에는 사용자 정의 컨트롤이 포함 된 페이지입니다.

이 질문을 참조하십시오 : Control.ResolveUrl versus Control.ResolveClientUrl versus VirtualPathUtility.ToAbsolute