2012-03-29 6 views

risposta

30

Utilizzare un campo nascosto per memorizzare il vostro url, quindi usa javascript per leggere il campo nascosto, quindi usalo nel tuo codice. In questo modo puoi mantenere il file JS separato dalla vista. Qualcosa di simile a questo:

//In Your View 
    @Html.Hidden("MyURL", Url.Action("Index")) 

//In Your JS 
    var myUrl = $("#MyURL").val(); 

    $.ajax({ url: myUrl , . . . 
+0

Ottimo suggerimento !! –

+0

Hai considerato che questo può aprire dei buchi di sicurezza nell'applicazione? Un hacker può sostituire l'URL di destinazione sul server semplicemente modificando il valore dei campi nascosti! – Mosh

+4

@Mosh Tutto in una pagina Web può essere modificato da un cosiddetto hacker, inclusi i file JavaScript prima dell'esecuzione. Non puoi fermarlo (anche con la crittografia). L'unico momento in cui questo sarebbe un problema è se un hacker potrebbe modificare il valore di quei campi nascosti per le altre persone. – Pluto

8

Il modo più semplice è solo per creare una variabile globale chiamata qualcosa e solo riferimento ad esso nella vostra JS esterno

var baseURL = '@Url.Action("Index")'; 

All'interno della vostra JS esterno

$.ajax({ url: baseURL + "Action" 
+0

Le migliori pratiche è quello di namespace le variabili globali '' ' se { window.myProject = {} (window.myProject!); } myProject.baseURL = '@ Url.Action ("Index")'; '' ' – Josiah

5

È possibile utilizzare RazorJS a tale scopo. Permette di scrivere Razor-Style C# o VB.NET all'interno dei file JavaScript. C'è una breve descrizione disponibile here.

+0

L'URL di descrizione data non è valido ora. Puoi controllare per favore? Si prega di aggiornare l'URL se ne conosci qualcuno. Anch'io ne ho bisogno. Grazie in anticipo. –

2

Non è necessario disporre di campo nascosto, anche questo funziona nel file .js esterno.

var myUrl =/ControllerName/ActionName;

$.ajax({ url: myUrl , . . 
0

ho usato un approccio simile a raklos, ma stava cercando di ottenere il percorso della directory principale in tutti i luoghi, così sono andato con il codice qui sotto.

@Html.Hidden("AppUrl", Url.Content("~"))