2014-02-12 10 views
10

Ich versuche, ein JavaScript-Bundle mit Microsofts Web Optimization Rahmen, wie dies zu machen:Gibt es eine einfache Möglichkeit, absolute URLs mit Framework/Script-Bündelung von Microsoft Web Optimization zu rendern?

@Scripts.Render("~/assets/bundle.js") 

Und ein kleines Bündel bauen, wie folgt aus:

public static void RegisterBundles(BundleCollection bundles) 
{ 
    bundles.Add(new ScriptBundle("~/assets/bundle.js") 
     .Include(
      "~/scripts/jquery-2.1.0.min.js", 
      "~/scripts/somescript.js" 
     )); 

    ... 
} 

Aber wenn Optimierungen auf, es nur macht eine relative URL, wie folgt aus:

<script src="/assets/bundle.js?v=mGDOiNaiTrSfcNq41OoA7A_BcN8PrXuMbfl-TE84HVY1"></script> 

Wie kann ich Skript eine absolute UR machen Bündelung haben L stattdessen? Ich konnte keinen Weg finden, dies durch die Dokumente auf MSDN zu tun. Das ist, was ich schließlich mag:

<script src="http://my.site.com/assets/bundle.js?v=mGDOiNaiTrSfcNq41OoA7A_BcN8PrXuMbfl-TE84HVY1"></script> 

Ist dies im Rahmen, oder muss ich eine Hilfsmethode mit Script.Url rollen?

+0

[Dies kann helfen] (http://stackoverflow.com/a/15663014/1810243). Obwohl IDK, wenn es eine bessere Möglichkeit gibt, in der neueren Version der Bündelung zu tun. Was ist dein Endziel dabei? – MikeSmithDev

+0

Das löst leider immer noch eine relative URL auf. Die relativen Pfade funktionieren im Allgemeinen gut für den Browser, funktionieren aber nicht gut für UI-Steuerelemente (z. B. in iOS), in denen Sie keine baseURL bereitstellen. –

Antwort

20

Ein einfacher Weg ist mit Scripts.RenderFormat:

@Scripts.RenderFormat("<script src='http://my.site.com{0}'></script>","~/assets/bundle.js") 

Eine Möglichkeit, URL von Anfrage zu bekommen. Kann nicht scheint mehrere Parameter mit dem RenderFormat zu verwenden, ist also, warum es ein wenig hässlich aussieht:

@Scripts.RenderFormat("<script src='//" + @Request.Url.Host + "/{0}'></script>", "~/assets/bundle.js") 

oder besser noch, eine Funktion zentralisieren den richtigen Pfad zu bekommen (eine fiktive Funktion):

@Scripts.RenderFormat("<script src='" + @Tools.GetRootURL() + "{0}'></script>", "~/assets/bundle.js") 

auch Sie brauchen nicht auf die .js auf dem Bündel:

bundles.Add(new ScriptBundle("~/assets/bundle") 
+0

Danke dafür; Ich stimme zu, dass dies funktionieren würde, obwohl ich dann eine Root-URL pro Umgebung konfigurieren müsste, wenn es mir wirklich lieber wäre, den Pfad der Host/virtuellen App zu verlassen. Wenn es im Framework wirklich nicht vorhanden ist, würde ich versuchen, es aus der Anfrage abzuleiten. –

+0

@BrandonLinton hinzugefügt, um URL aus Anfrage zu bestimmen. – MikeSmithDev