AJAX Calls und virtuelle Verzeichnisse mit ASP.NET MVC und dem “base” Tag


In einem meiner letzten Artikel habe ich bereits eine Lösung vorgestellt wie man über ASP.NET die aktuelle URL bereitstellt und in eine globale JavaScript Variable schreibt. Denn sobald man mit virtuellen Verzeichnissen arbeitet funktioniert die Angabe von z.B. “/Home/GetAllItems” nicht mehr als relative URL Angabe. Die bereits von mir vorgestellte Lösung ist recht aufwendig, da man überall bei Pfadangaben auf die globale JavaScript variable zugreifen muss. Der alte Lösungsansatz ist daher meiner Meinung nach die optimale Lösung.

Jetzt bin ich durch weitere Recherchen auf eine einfachere Lösung gestoßen und dafür wird nur das “base” Tag benötigt und ein einfacher MVC Helper “Url.Content”.

...
<head>
    <meta charset="utf-8" />
    <title>My ASP.NET MVC Application</title>
    <base href="@Url.Content("~")" />
    ...
</head>

Jetzt kann man wieder alle URL Angaben wie bisher verwenden, d.h. wenn die Webseite unter

http://localhost/myVirtualDir/Home/Index

liegt, dann wird im Base Tage “/myVirtualDir/” stehen und diese Verzeichnisangabe wird automatisch vor jeden AJAX Request gestellt. Befinde ich mich nicht in einem virtuellen Verzeichnis, dann steht einfach nur “/” im Base Tag und alles funktioniert ebenfalls wie gewohnt. Es ist also keine extra globale Variable notwendig wie in meinem ersten Lösungsvorschlag. Es muss also nur das Base Tag erstellt werden und die restlichen Linkangaben können wie gewohnt verwendet werden.

Bei Stackoverflow habe ich nur gelesen das es im Zusammenhang mit HTML Anchor “#” evtl. Probleme geben soll:

http://stackoverflow.com/questions/1889076/is-it-recommended-to-use-the-base-html-tag

Advertisements

2 Gedanken zu „AJAX Calls und virtuelle Verzeichnisse mit ASP.NET MVC und dem “base” Tag

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s