Relative URL in JQuery Post Call
Ich habe die folgende situation.
Entwickelte ich meine erste MVC Asp.Net -Anwendung. es läuft auf meinem server unter der folgenden Adresse
http://localhost:59441/
Schrieb ich einige JQuery-Post-Methoden, die sah aus wie diese
$.ajax({
type: "POST",
url: "/CeduleGlobale/UpdateCheckBox", ...
CeduleGlobale ist mein ControllerName
und
UpdateCheckBox ist mein methodName
Wenn ich die Anwendung auf dem testServer, es wurde in ein VirtualDirectory
daher die Anwendung ist jetzt
http://testServer/JprApplication/
nicht mehr port angeben und auch den Namen einer Anwendung
Als ich angefangen habe zu testen, habe ich schnell bemerkt, dass mein JQuery Post-Aufrufe nicht mehr funktionieren...
Ich geändert, so dass jetzt die URL ist
/JprMvc/CeduleGlobale/UpdateCheckBox
das problem ist 2 Fach.
- dies macht es schwer zu testen auf meiner Entwicklungs-Maschine, weil IIS Express nicht lassen Sie mich geben Sie ein virtuelles Verzeichnis.
- Ich weiß nicht, wie das hartcodieren der Name des Virtuellen Verzeichnisses in der JQuery-weil ich nicht weiß, was der name der Anwendung in der Produktionsumgebung und deshalb werde ich ändern müssen, um mein Skript, bevor ich installieren Sie die Anwendung in der Produktion.
Ich bin sicher, ich bin fehlen einige grundlegende Sache, um dies zu vereinfachen.
Dank
InformationsquelleAutor der Frage SerenityNow | 2013-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Je nachdem, wo Sie Ihre JavaScript-befindet sich (innerhalb der Ansicht oder in einer separaten JS-Datei), müssen Sie ein paar Optionen.
Option 1 - Innerhalb der Ansicht
Verwenden Sie einfach die Html-Helfer zum generieren der links für Sie
Option 2 - Standalone JS-Datei
Wir haben in der Regel eine Funktion pro Seite gibt, die Seite zu definieren. Also, wir können etwas tun, wie die folgenden:
Ansicht
Standalone JS-Datei
Option 3 - Standalone JS-Datei Methode 2
Könnten Sie eine Globale variable in Ihre in Ihre JS-Datei mit der Datei siteroot. Die Auslosung zurück ist, dass hier müssen Sie hand anlegen, jeder der action-Methode Pfade. Auf jeder Seite konnten Sie im Stammverzeichnis der site Globale variable als solche:
Standalone JS-Datei
Ansicht
Halten Sie im Verstand, den Sie nicht verwenden können, die Razor-syntax in eine stand-alone-JS-Datei. Ich glaube, dass es am besten ist, zu lassen, Razor/MVC/.NET dynamisch geben Sie die site-Pfad-oder URL-route, wie es wird wirklich reduzieren auf die Fehler, die gemacht werden könnten, beim verschieben zwischen Standorten/virtuelle Verzeichnisse.
InformationsquelleAutor der Antwort Tommy
Soweit ich weiß gibt es keinen anderen Weg, um dieses. Es sei denn, Sie sind bereit, Anwender-relative URL ' s
ich.e:
Aber das kann chaotisch aus verschiedenen Gründen, wenn Sie refactor-code.
Alternativ stellen Sie die URL, die Global definiert und daher Sie müssen dann nur ändern Sie es in einmal Platz vor dem Produktionsstart.
d.h.
So, wenn Sie es nicht brauchen, können Sie einfach legen Sie
serverRoot = '';
und alles wird wieder so, wie es jetzt ist.InformationsquelleAutor der Antwort Rob Schmuecker
Ich hatte diese Art Problem auf MVC 5 mit Hilfe von JQuery, also ging ich zu dieser Lösung, entledigt sich des Problems, wenn Sie in "Localhost" und in jedem Navigator, auch wenn Sie den Einsatz der app in einem Unterordner.
Dann in jedem ajax-Aufruf :
InformationsquelleAutor der Antwort RizzCandy
Ich weiß, dies ist eine alte post. Aber, ich hatte das gleiche Problem und endete hier. Und konnte das Problem beheben mit UrlHelper.Aktion Methode.
Es sollte so etwas wie dieses. (Beachten Sie, dass diese spezielle Lösung funktioniert in der Ansicht).
Hoffe, das hilft. 🙂
InformationsquelleAutor der Antwort Sampath Dilhan
Pass @Url.Handlung("action","controller") an das javascript aus dem Blick. Dies wird es ermöglichen, werden dynamisch aktualisiert, zur Laufzeit.
Möglicherweise gibt es eine Funktion, um den root-Pfad auch für die, die Sie verwenden können, initialisieren Sie die root-Variablen in den vorherigen Antworten.
InformationsquelleAutor der Antwort Codersjunto