2010-02-10 4 views
8

내 이미지 갤러리에 jQuery Lightbox를 사용하고 있습니다. 버튼 이미지
URL은 '../../Content/Lightbox/lightbox-btn-next.gif'내 URL이 잘 작동
'localhost/Something1/Somtehing2'
I 버튼 이미지에 또 다른 후 'localhost/Something1/Something2/Something3'와 같은 경로 URL을 사용하는 경우 올바르지 않습니다.
.js 파일 내에 Url.Action()을 사용할 수 있습니까? 나 의미가 다른 요소 - 나는 태그 'HREF 년대 또는 양식'행동의에서 URL을 끌어 선호JavaScript의 URL 도우미

<script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery.lightbox-0.5.js") %>"></script> 

답변

5

당신은 Url.Action을 사용할 수 없습니다)는 내부 .js 파일. 그러나 당신은 전역 변수를 정의하고 그것을 당신의 js 파일에서 사용할 수 있습니다.

<script type="text/javascript" charset="utf-8"> 
    function UrlContent(path) { 
     return '@Url.Content("~/")' + path.replace(/^\//, ''); 
    } 
</script> 

내 마스터 페이지가 컴파일 제공하는 경우 :

<script type="text/javascript"> 

    var imageUrl = "<%= ... %>"; 

</script> 
+0

Tnx! 그게 내 문제를 해결해 줬어. –

0

:
이 내가의 .js 파일을 호출하는 방법입니다.

<img class="_click" src="<%= Url.Content("~/my/image.png") %>" alt="Click" /> 

그리고 내 자바 스크립트에서

(jQuery를 두 번 점검이, 나는 그것이 정확한 구문인지 모르겠습니다.) :

var url = $('._click').attr('href'); 
// To pass these to your plugin as options 
// see lightbox source for a full list 
$('a').lightBox({ imageLoading : url }) 

또 다른 약간은 덜 선호하는 옵션이 상단에 설정을 추가하는 것입니다 귀하의 파일 :

이 방법은 마크 업과 코드를 혼합하기 때문에 '선호도가 낮습니다.

아직 JS는 컨트롤러에서 파일 서비스를 제공하는 것입니다 (최대 깔끔한 많이 필요) 또 다른 방법 : (

public ActionResult GetFileContent(string filename) 
{ 
    // important: make sure to control the path for security 
    var path = Server.MapPath("~/Scripts/" + filename); 
    var content = System.IO.File.ReadAllText(path); 

    // Use some kind of template convention 
    content = content.Replace("{{IMAGE_PATH}}", Url.Content(@"~/my/image.png")); 

    var bytes = new UTF8Encoding().GetBytes(content); 
    return new FileContentResult(bytes, "text/javascript"); 
} 
+0

URL이 jquery.lightbox-0.5.js 내부 : –

+0

스크립트 태그를 사용할 수 있습니까? 라이트 박스() 호출을 어디에서 실행하고 있습니까? – ziya

+0

부분보기에서 라이트 박스 호출을 실행 중입니다. http://leandrovieira.com/projects/jquery/lightbox에서 이러한 설정을 재정의하는 방법에 대한 설명이 있습니다. 하지만 그게 작동하지 않습니다 :) –

10

은 내가 @ Url.Content ('~/경로')와 거의 같은 일을 수행 내 마스터 페이지에서 다음 넣어 이것은 내 사이트 루트를 경로에 적용하는 javascript 함수로 변환됩니다. 훌륭하게 작동합니다. @Url.Content ("~ /") 이후에 슬래시가있는 경우 path.replace regex는 선행 슬래시를 제거합니다. 내가보기 내부 태그가없는

'@Url.Content(@"~/some paths")' 
+0

감사합니다. @matt. 훌륭한 아이디어와 꽤 잘 여기에서 작동합니다. –

2

은 바로 이와 같은 작은 따옴표로 @Url.Content(@"~/some paths")을 넣어.