Ich bin also dazu übergegangen, die Syntax <%: Url.Content(~/site/blah) %>
standardmäßig für CSS, JScript und Bild-URLs zu verwenden - löst in der Tat viele Probleme; und es ist zumindest konsistent zwischen WebForms und Razor-Seiten (nicht alle meine Entwickler werden Razor verwenden, und dennoch werden sie weiterhin an dieser Plattform arbeiten, die ich erstellt habe).
Für etwas, das ich gerade mache, könnte ich jedoch wirklich eine Möglichkeit gebrauchen, eine relative URL, die in einer Razor-Seite geschrieben wurde, zur Laufzeit in die entsprechende serverseitige Datei aufzulösen, bevor sie wieder in eine absolute URL für den Client umgewandelt wird. Url.Content
macht nichts mit relativen URLs.
Also möchte ich im Grunde genommen ein Äquivalent von ResolveUrl
oder ResolveClientUrl
auf Razor-Ebene haben.
Ich möchte damit kürzere (und tolerantere gegenüber Umbenennungen) Ressourcenpfade in einigen meiner MVC-Ansichten ermöglichen, die einige Ordner weiter unten im Stammverzeichnis liegen und deren Inhaltsordner leichter als relativer Pfad ausgedrückt werden könnten - also könnte ich haben:
folder\folder\views\shared\layout.cshtml
und
folder\folder\content\site.css
(Ich habe auch die Verwendung einer Layoutseite abgeleitet, um die Art von Problemen nachzubilden, die durch ResolveUrl und das erneute Basieren, das WebForms durchführt, behandelt werden)
Wenn ich Url.Content
so verwende, wie es ist, müsste ich den vollständigen Pfad angeben:
Url.Content("~/folder/folder/content/site.css")
Aber was ich gerne hätte ist:
Url.Content("../../site.css")
Und dass das natürlich funktioniert, unabhängig davon, wie viele Pfade im aktuellen Anforderungsrouten vorhanden sind.
Natürlich kann ich das in WebForms zum Laufen bringen, wenn ich den Aufruf von Url.Content verwerfe und mich nur auf das Neubasieren von URLs verlasse.
Gibt es ein Äquivalent in Razor?