2010-02-10 3 views
8

Sto usando jQuery Lightbox per la mia galleria di immagini.
L'URL per l'immagine del pulsante è '../../Content/Lightbox/lightbox-btn-next.gif'
Questo funziona bene se il mio URL è 'localhost/Something1/Somtehing2'
Se uso un altro percorso come 'localhost/Something1/Something2/Something3' poi URL per le immagini dei pulsanti non è corretto.
Posso usare Url.Action() all'interno di file .js?
questo è come mi chiamo i file .js:Helper URL in JavaScript

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

risposta

5

Non è possibile utilizzare Url.Action() all'interno .js. Ma puoi definire la variabile globale e usarla nel tuo file js.

<script type="text/javascript"> 

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

</script> 
+0

Tnx! Questo ha risolto il mio problema. –

0

preferisco tirare le URL da un tag 'href o modulo' azione del - o qualche altro elemento che abbia un senso.

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

E nella mia javascript (doppio controllo questo su jQuery, io non sono sicuro se è la sintassi esatta.):

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

Un'altra opzione leggermente meno preferito è quello di aggiungere le impostazioni in cima il tuo file:

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

Ho detto "meno preferito" perché questo approccio mescola markup e codice.

Un altro approccio (che ha bisogno di un sacco di riordinare) è quello di servire js file da un controllore:

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

l'URL è all'interno jquery.lightbox-0.5.js Non ho un tag all'interno View. –

+0

Forse puoi usare il tag script? Dove stai eseguendo la tua chiamata a lightbox()? – ziya

+0

Sto eseguendo chiamate lightbox all'interno di una vista parziale. C'è una spiegazione su http://leandrovieira.com/projects/jquery/lightbox come queste impostazioni possono essere sostituite. Ma non funziona :) –

10

ho messo il seguente nella mia pagina master, che compie più o meno la stessa cosa di @ Url.Content ('~/path'):

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

Quando il mio pagina master viene compilato e servito questo si traduce in una funzione javascript che applica la mia radice del sito al percorso. Funziona alla grande. Il regex path.replace rimuove semplicemente una barra iniziale se ce n'è una dal momento che @ Url.Content ("~ /") ha una barra di chiusura.

+0

Grazie a @matt. Ottima idea e funziona abbastanza bene qui. –

2

Basta mettere @Url.Content(@"~/some paths") in virgolette singole, come questo:

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