Der (rechte) Weg zu Webressourcen (Teil 2)
Kommentare

Pfade zu Ressourcen spezifizieren
Nehmen Sie einmal an, dass Sie mit Pfaden relativ zum Stammverzeichnis der Site arbeiten – eine sehr gebräuchliche und vernünftige Wahl. Der folgende Link geht davon

Pfade zu Ressourcen spezifizieren

Nehmen Sie einmal an, dass Sie mit Pfaden relativ zum Stammverzeichnis der Site arbeiten – eine sehr gebräuchliche und vernünftige Wahl. Der folgende Link geht davon aus, dass Sie einen CSS-Ordner unter der Stammwebsite eingerichtet haben: . Lautet der URL Ihrer Website http://www.yoursite.com, versucht der Browser letztlich, das Stylesheet von http://www. yoursite.com/css/site.css herunterzuladen. Wenn Sie nun Ihre Anwendung in ein virtuelles Verzeichnis (z. B. MyApp) unter derselben Site verschieben, bleibt der tatsächliche Downloadpfad gleich. Leider hat sich nun aber der tatsächliche Pfad, in dem das Stylesheet untergebracht ist, geändert: http://www.yoursite.com/MyApp/css/site.css. Das genügt, um einen fehlerhaften Link und einen anschließenden http-404-Fehler hervorzurufen – die Wiedergabe der Seiten wird zwangsläufig in Mitleidenschaft gezogen. In ASP.NET verwenden Sie eine maßgeschneiderte Methode, um Inhalts-URLs aufzulösen. Das ideale Verfahren für das Referenzieren von Ressourcen wie Skriptdateien, Bildern und CSS-Stylesheets zeigt Listing 1.

Listing 1

" 
      rel="stylesheet" 
      type="text/css" />
" 
      rel="stylesheet" 
      type="text/css" />  
   

Die Methode Url.Content verarbeitet den übergebenen relativen Pfad und übersetzt ihn in einen gültigen absoluten Pfad. Rufen Sie die Methode Url.Content aus einem Codeblock heraus auf. Damit stellen Sie sicher, dass der Servercode ausgesendet wird, um den eigentlichen URL zur Laufzeit zu „berechnen“; der Browser empfängt einfach den korrekte URL, zu dem ein Aufruf abzusetzen ist.

In der Implementierung von Url.Content spielt das Tilde-Zeichen (~) eine Schlüsselrolle. In ASP.NET hat eine in einem relativen Pfad verwendete Tilde eine besondere Bedeutung. ASP.NET löst die Tilde zum tatsächlichen Stamm der aktuellen Anwendung auf, während der Backslash stattdessen auf den Stamm der IIS-Hostsite verweist. Für den Entwickler hat das den Vorteil, dass ein auf einer Tilde basierender Pfad den Stamm zurückgibt, und zwar unabhängig davon, ob die Anwendung auf einer Site oder in einem virtuellen Verzeichnis gehostet wird.

Wieso benötigt man dann Url.Content, wenn doch der Tilde-Operator so leistungsfähig ist? Der Tilde-Operator ist nur ASP.NET – sowohl Web Forms als auch MVC – bekannt. Den Tilde-Operator können Sie mit Serversteuerelementen oder pfadbezogenen Eigenschaften in Serversteuerelementen und Servercode von ASP.NET verwenden. Browser wissen mit der Tilde in Pfadangaben nichts anzufangen, und folglich können Sie den Tilde-Operator für Clientelemente nicht verwenden. Die Methode Url.Content in ASP.NET MVC löst die Tilde einfach zu einem normalen Pfad auf, den Browser verstehen und weiterverarbeiten können. In ASP.NET Web Forms erreichen Sie das Gleiche mit der Methode ResolveUrl der Klasse Page. Die Methode rufen Sie aus einem Codeblock heraus auf, wie das folgende Beispiel zeigt:

  

Wie sieht es aus, wenn Sie einen URL aus JavaScript-Code heraus verwenden müssen? In diesem Fall ist es für Sie wahrscheinlich am besten, eine globale Variable zu definieren, die entweder mit einem Codeblock festgelegt oder basierend auf der Bereitstellungsprozedur modifiziert wird. Wenn Sie sich für einen Codeblock entscheiden, greifen Sie zu folgendem: var root = ‚. Beachten Sie aber, dass Sie in diesem Fall das Skript in eine ASP.NET-Seite einbetten und lokal verwenden müssen.

Dino Esposito ist R&D Director bei Crionet, einer Firma, die sich auf webbasierte Lösungen für Sportereignisse in ganz Europa spezialisiert hat (http://www.e-tennis.net). Außerdem ist Dino der Autor von „Programming ASP.NET MVC“, Microsoft Press, 2010.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -