2012-03-29 8 views

Antwort

30

Verwenden Sie ein verstecktes Feld speichern Sie Ihre URL, dann benutze Javascript, um das versteckte Feld zu lesen, und benutze es dann in deinem Code. Auf diese Weise können Sie die JS-Datei von der Ansicht trennen. Etwas wie folgt aus:

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

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

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

Ausgezeichneter Vorschlag !! –

+0

Haben Sie in Betracht gezogen, dass dies zu Sicherheitslücken in der Anwendung führen kann? Ein Hacker kann die Ziel-URL auf dem Server ersetzen, indem er einfach den Wert versteckter Felder ändert! – Mosh

+4

@Mosh Alles in einer Webseite kann von einem sogenannten Hacker geändert werden, einschließlich der JavaScript-Dateien, bevor sie ausgeführt werden. Sie können das nicht verhindern (auch nicht mit Verschlüsselung). Das einzige Problem ist, dass ein Hacker den Wert dieser versteckten Felder für andere Personen ändern könnte. – Pluto

8

Der einfachste Weg ist nur eine globale Variable mit dem Namen etwas zu schaffen, und zu verweisen nur, um es in Ihrem externen JS

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

In Ihrem externen JS

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

Best Practice ist Ihre globale Variablen '' ' if { window.myProject = {} auf Namensraum (window.myProject!); } myProject.baseURL = '@ URL.Action ("Index")'; '' ' – Josiah

5

Sie RazorJS zu diesem Zweck verwenden können. Es ermöglicht das Schreiben von Razor-Style C# oder VB.NET in Ihre JavaScript-Dateien. Es ist eine kurze Beschreibung verfügbar here.

+0

Die angegebene URL ist nicht mehr gültig. Können Sie das bitte überprüfen? Bitte aktualisieren Sie die URL, wenn Sie welche kennen. Ich brauche das auch. Danke im Voraus. –

2

Es ist nicht notwendig, ein verstecktes Feld zu haben, auch das funktioniert in der externen .js-Datei.

var myUrl =/Controllername/Aktionsname;

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

verwenden ich einen ähnlichen Ansatz zu raklos, sondern suchte den Root-Verzeichnis-Pfad in allen Orten zu bekommen, also ging ich unten mit dem Code.

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