我正在尝试使用Microsoft的Web Optimization框架来呈现
JavaScript包,如下所示:
@Scripts.Render("~/assets/bundle.js")
并建立一个小捆,像这样:
public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/assets/bundle.js") .Include( "~/scripts/jquery-2.1.0.min.js","~/scripts/somescript.js" )); ... }
但是,当优化开启时,它只呈现相对URL,如下所示:
<script src="/assets/bundle.js?v=mGDOiNaiTrSfcNq41OoA7A_BcN8PrXuMbfl-TE84HVY1"></script>
如何使用脚本捆绑代替绝对URL?我找不到一种方法来查看MSDN上的文档.这是我最终会喜欢的:
<script src="http://my.site.com/assets/bundle.js?v=mGDOiNaiTrSfcNq41OoA7A_BcN8PrXuMbfl-TE84HVY1"></script>
这是在框架中,还是要用Script.Url滚动一个帮助方法?
解决方法
一个简单的方法是
Scripts.RenderFormat:
@Scripts.RenderFormat("<script src='http://my.site.com{0}'></script>","~/assets/bundle.js")
从请求中获取URL的方式.似乎没有使用RenderFormat的多个参数,所以这就是为什么它看起来有点丑陋:
@Scripts.RenderFormat("<script src='//" + @Request.Url.Host + "/{0}'></script>","~/assets/bundle.js")
或者更好的是,集中一个函数以获得正确的路径(使用虚构函数):
@Scripts.RenderFormat("<script src='" + @Tools.GetRootURL() + "{0}'></script>","~/assets/bundle.js")
此外,您不需要捆绑包上的.js:
bundles.Add(new ScriptBundle("~/assets/bundle")