我工作的一个ASP.Net MVC 4应用程序和使用捆绑和minifiction渲染风格和脚本文件。
我有一个脚本文件( 文件 )在另一个文件( 文件B),其通话功能,当我使用
@Scripts.Render()
方法,它使link
的文件标记文件 B之前,因此触发一个错误,并且脚本无法正常工作。
有没有办法强迫@Script.Render()
来渲染link
在一定的顺序代码,而无需使用单独的包对每个文件????
编辑
我使用IncludeDirectory
方法包括该文件夹中的所有脚本文件
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/js").IncludeDirectory(
"~/Scripts/js",
"*.js"));
}
}
写你自己的订货在这个问题达林季米特洛夫回答: 我怎么能指定一个明确的ScriptBundle包括订单?
public class MyBundleOrderer : IBundleOrderer
{
public virtual IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
{
//any ordering logic here
return files;
}
}
默认情况下,将捆绑按字母顺序添加脚本。 它会走动知名图书馆和以正确的顺序(它将把jQuery的在第一位,然后jQuery的用户界面,例如)添加。
最简单的方法是自己订购的脚本。 一种方法是你的自定义脚本移动到不同的文件夹,然后所有的脚本添加到您想要的顺序自己的包:
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/js").IncludeDirectory(
"~/Scripts/js","*.js"));
bundles.Add(new ScriptBundle("~/bundles/myScripts").Include(
"~/Scripts/custom/scriptB.js",
"~/Scripts/custom/scriptA.js"));
}
}
另一种选择是通配符。 该选项还包括移动您的自定义脚本自己的文件夹,但只有一包( 源 ):*
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/js").Include(
"~/Scripts/*.js",
"~/Scripts/custom/scriptB.js",
"~/Scripts/custom/scriptA.js"));
}
}
另外关于您的评论“有没有办法强迫@Script.Render()
来渲染link
在一定的顺序代码,而无需使用单独的包对每个文件” -注意,单独的链接标签仅在调试模式下发生。 一旦你在释放模式部署,只会有一个链接标签和一个文件。
看看BundleCollection.FileSetOrderList为bundeled文件的排序。 我发现这个博客帖子大约是: http://weblogs.asp.net/imranbaloch/archive/2012/09/30/hidden-options-of-asp-net-bundling-and-minification.aspx这也解释了它相当不错。
对于JQuery的排序的示例代码:
BundleFileSetOrdering bundleFileSetOrdering1 = new BundleFileSetOrdering("jquery");
bundleFileSetOrdering1.Files.Add("jquery.js");
bundleFileSetOrdering1.Files.Add("jquery-min.js");
bundleFileSetOrdering1.Files.Add("jquery-*");
bundleFileSetOrdering1.Files.Add("jquery-ui*");
bundleFileSetOrdering1.Files.Add("jquery.ui*");
bundleFileSetOrdering1.Files.Add("jquery.unobtrusive*");
bundleFileSetOrdering1.Files.Add("jquery.validate*");
bundles.FileSetOrderList.Add(bundleFileSetOrdering1);
您应该考虑使用盒式http://getcassette.net/它支持基于每个文件里面找到脚本引用脚本依赖自动检测。
如果你更喜欢坚持MS网络优化解决方案,但像基于脚本引用安排脚本的想法,你应该阅读我的文章的博客http://blogs.microsoft.co.il/oric/2013/12/27/building-single -page应用束-订货者/