Manuelles schreiben einer lokalen Url in Asp.NET
Glaubt man der Dokumentation von HttpRequest.ApplicationPath, so ist es recht einfach, einen Link in einer eigenen Asp.NET Seite zu verwenden:
Label1.Text = Request.ApplicationPath; Image1.ImageUrl = Request.ApplicationPath + "/images/Image1.gif"; Label2.Text = Image1.ImageUrl; |
Aber damit steht man schnell vor einem Problem: Liegt die Anwendung im Root, wie es beispielsweise standardmäßig beim Visual Studio 2010 Development Server der Fall ist, so erhält man als Ergebnis nur ein /. Die korrekte Zeile wäre dann also:
Image1.ImageUrl = Request.ApplicationPath + "images/Image1.gif"; |
Befindet sich die Seite aber in einem virtuellen Verzeichnis, so kommt das Verzeichnis ohne abschließenden / zurück:
Image1.ImageUrl = Request.ApplicationPath + "/images/Image1.gif"; |
Je nach Speicherort muss man also beim händischen Zusammensetzen der URL’s also den abschließenden Slash berücksichtigen, oder eben auch nicht.
Eine gute Lösung habe ich in einem Blog-Artikel von 2004 gefunden:
VirtualPathUtility.ToAbsolute("~/images/Image1.gif") |
Damit überlässt man Asp.NET die korrekte Umsetzung, welche auch tadellos und ohne Experimente funktioniert!
Update:
Manchmal sieht man einfach den Wald vor lauter Bäumen nicht. Die kürzere Lösung ist Url.Content, welche ein vergleichbares Ergebnis liefert und auch in den Templates von Asp.NET MVC3 verwendet wird.