2010-02-10 14 views
8

मैं अपनी छवि गैलरी के लिए jQuery लाइटबॉक्स का उपयोग कर रहा हूं।
बटन छवि के लिए URL '../../Content/Lightbox/lightbox-btn-next.gif'
कि ठीक काम करता है अगर मेरे URL 'localhost/Something1/Somtehing2'
अगर मैं बटन छवियों के लिए 'localhost/Something1/Something2/Something3' की तरह एक और मार्ग तो URL का उपयोग सही नहीं है।
क्या मैं .js फ़ाइलों के अंदर Url.Action() का उपयोग कर सकता हूं? - या कुछ अन्य तत्व यह है कि समझ में आता हैजावास्क्रिप्ट में यूआरएल सहायक

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

उत्तर

5

आप Url.Action उपयोग नहीं कर सकते) के अंदर फ़ाइलों .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

टीएनएक्स! यह मेरी समस्या हल हो गई। –

0

मैं एक टैग 'href या प्रपत्र' एक्शन से यूआरएल को खींचने के लिए पसंद करते हैं:
यह मैं कैसे .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 }) 

एक और थोड़ा कम पसंद के विकल्प के शीर्ष पर अपनी सेटिंग्स को जोड़ने के लिए है आपकी फ़ाइल:

<script type="text/javascript"><![CDATA[ 
    $('a').lightBox({ imageLoading : <%= Url.Content("~/my/image.png") %> }) 
//]]></script> 

मैंने कहा 'कम पसंद' क्योंकि यह दृष्टिकोण मार्कअप और कोड को मिश्रित करता है।

फिर भी एक और दृष्टिकोण आप की सेवा के लिए 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

यूआरएल jquery.lightbox-0.5.js अंदर है मैं दृश्य के अंदर एक एक टैग नहीं है। –

+0

शायद आप स्क्रिप्ट टैग का उपयोग कर सकते हैं? आप अपना लाइटबॉक्स() कॉल कहां चला रहे हैं? – ziya

+0

मैं आंशिक दृश्य के अंदर लाइटबॉक्स कॉल चला रहा हूं। Http://leandrovieira.com/projects/jquery/lightbox पर एक स्पष्टीकरण है कि इन सेटिंग्स को कैसे ओवरराइड किया जा सकता है। लेकिन यह काम नहीं करता है :) –

10

मैं अपने मास्टर पृष्ठ, जो @ Url.Content ('~/पथ') के रूप में ज्यादा एक ही बात सिद्ध में निम्नलिखित डाल यह एक जावास्क्रिप्ट फ़ंक्शन में अनुवाद करता है जो पथ पर मेरी साइट रूट लागू करता है। बहुत अच्छा काम करता है। पथ। रेप्लेस रेगेक्स बस एक प्रमुख स्लैश हटा देता है यदि @ url.Content ("~ /") के बाद से एक स्लीश समाप्त हो रहा है।

+0

धन्यवाद @matt। उत्कृष्ट विचार और यहां बहुत अच्छी तरह से काम करता है। –

2

बस इस जैसे एकल उद्धरण में @Url.Content(@"~/some paths") डाल:

'@Url.Content(@"~/some paths")' 
संबंधित मुद्दे