2009-05-28 20 views
16

Sto caricando del contenuto tramite jQuery.load ('/ Business/Tag'), che funziona bene quando si utilizza il mio server web locale. Ma quando si usa iis questo non si risolve correttamente. Ho visto un paio di modi diversi per aggirare questo come ResolveUrl. Qual è il modo migliore per gestire gli URL di risoluzione nel tuo javascript?ASP.NET MVC risolve gli URL in javascript

risposta

18

Mi sono imbattuto in questo esatto problema con il mio JavaScript. Poiché il mio JavaScript era anche in un file separato incluso nella mia Pagina Master, non potevo usare ResolveUrl nel mio caso.

Ecco come l'ho risolto nel mio caso. Ho incluso il seguente JavaScript nel tag head nella mia pagina master in alto:

<script type="text/javascript"> 
    var baseUrl = "<%= Request.Url.GetLeftPart(UriPartial.Authority) %>"; 
</script> 

sto impostando una variabile globale che è accessibile a tutti i miei file JavaScript denominato baseurl.

Il tuo codice sarebbe poi diventato:

jQuery.load(baseUrl + '/Business/Tags'); 
+0

Ho provato questo metodo ma non riesco a ottenere ciò di cui ho bisogno ma penso di poter lavorare con esso.Sto ricevendo una stringa come questa "http: // mtsengv003 /" ma ne ho bisogno uno come questo "http: // mtsengv003/MVC /" Grazie –

+5

Penso che sia meglio usare: var baseUrl = "<% = Richiesta .Url.GetLeftPart (UriPartial.Authority) + Request.ApplicationPath.TrimEnd ('/')%> "; –

+0

@ eu-ge-ne: Grazie per averlo indicato. La mia memoria non è più quella di una volta. Il tuo codice è perfetto –

5

Per quanto mi riguarda sto usando aiutanti Url.Action/Url.RouteUrl con JavaScript/jQuery dove è possibile:

$.load('<%= Url.Action("Tags", "Business") %>') 

o

In altri casi sto usando l'helper ResolveUrl (da MVCContrib o è possibile scrivere il proprio):

$.load('<%= Url.ResolveUrl("~/Business/Tags") %>') 

aggiornamento:

E 'anche possibile creare controller speciale per il vostro JavaScript/jQuery con le azioni, tornando PartialViews con JavaScript:

public ActionResult YourJavaScript() 
{ 
    Response.ContentType = "application/x-javascript"; 
    return PartialView("YourJavaScript"); 
} 

Poi, nel tuo YourJavaScript.ascx voi può utilizzare il codice JavaScript/jQuery con i tag del server WebForms. Raccomando comunque di non utilizzare URL appena codificati in jQuery/AJAX

+1

Se si posiziona tutto il codice JavaScript in un file separato e si fa riferimento a questo file utilizzando Url.Content nella pagina Master, Url.ResolveUrl non funzionerà all'interno del codice JavaScript. Qualcuno, per favore, correggimi se sbaglio su questo. –

1

Mi raccomando ancora di utilizzare il tag href di base nella pagina Master. quindi qualsiasi immagine o chiamata javascript si risolverà da questo URL. Questo ti permetterà di mettere le tue funzioni/chiamate javascript in un file js esterno.

 
<html> 
    <head> 
     <base href="http://www.mysite.com/virtual_dir1/"> 
     <script src="location_of_js_file"> 

Ricordare la desinenza '/' nella base href.

Inoltre, rimuovere l'iniziale '/' e ogni volta che si esegue jQuery.load ('Affari/Tag'), verrà effettivamente da http://www.mysite.com/virtual_dir1/Business/Tags.

+0

Mi piace molto questo approccio. Così pulito e richiede così poco sforzo. Grazie – lomaxx

+0

Questo è sicuramente un approccio pragmatico al problema, ma l'utilizzo di ['base'] (http://www.w3.org/TR/REC-html40/struct/links.html#h-12.4) in questo modo è errato. L'HREF di base dovrebbe essere usato solo per risolvere gli URI relativi alla pagina corrente in cui ti trovi. Impostando 'base' in questo modo ** tutti ** gli URI relativi in ​​questa pagina punteranno a' http: // www.mysite.com/virtual_dir1/'. – ahsteele

2

un paio di modi che facciamo questo nelle nostre applicazioni:

var applicationPath = '<%= Url.Content("~/") %>'; 

O

var applicationPath = '<%= Request.Url.Scheme %>://<%= Request.Url.Host %><%= Request.ApplicationPath %>/'; 

Abbiamo quindi utilizzare ApplicationPath come URL di base per tutti i nostri chiamate ajax.