您的位置:首页 > 编程语言 > ASP

asp.net Bundle功能扩展

2012-11-26 00:00 591 查看
前言
新建Asp.net MVC4项目的时候,在Global.asax.cs里面发现多了一句代码
BundleConfig.RegisterBundles(BundleTable.Bundles)
google了以后终于弄清楚了这个的作用,发现这个东西确实非常实用,且功能强大,能够压缩合并js和CSS,但是目前的使用起来不是特别好,如果添加js或者css文件的话,需要修改BundleConfig的代码。
这里我自己简单修改了BundleConfig,对这个进行简单的扩展。
下面贴出代码
先贴配置文件BundleConfig.xml(文件放在网站目录下路径见代码中变量BundleConfigPath)
<?xml version="1.0" encoding="utf-8" ?> 
<root> 
<Scripts> 
<Script Path="~/bundles/jquery"> 
<File>~/Scripts/jquery-{version}.js</File> 
</Script> 
<Script Path="~/bundles/jqueryui"> 
<File>~/Scripts/jquery-ui-{version}.js</File> 
</Script> 
<Script Path="~/bundles/jqueryval"> 
<File>~/Scripts/jquery.unobtrusive*</File> 
<File>~/Scripts/jquery.validate*</File> 
</Script> 
<Script Path="~/bundles/modernizr"> 
<File>~/Scripts/modernizr-*</File> 
</Script> 
<Script Path="~/bb/aa"> 
<File>~/Views/Home/addda.js</File> 
</Script> 
</Scripts> 
<Styles> 
<Style Path="~/Content/themes/base/css"> 
<File>~/Content/themes/base/jquery.ui.core.css</File> 
<File>~/Content/themes/base/jquery.ui.resizable.css</File> 
<File>~/Content/themes/base/jquery.ui.selectable.css</File> 
<File>~/Content/themes/base/jquery.ui.accordion.css</File> 
<File>~/Content/themes/base/jquery.ui.autocomplete.css</File> 
<File>~/Content/themes/base/jquery.ui.button.css</File> 
<File>~/Content/themes/base/jquery.ui.dialog.css</File> 
<File>~/Content/themes/base/jquery.ui.slider.css</File> 
<File>~/Content/themes/base/jquery.ui.tabs.css</File> 
<File>~/Content/themes/base/jquery.ui.datepicker.css</File> 
<File>~/Content/themes/base/jquery.ui.progressbar.css</File> 
<File>~/Content/themes/base/jquery.ui.theme.css</File> 
</Style> 
<Style Path="~/Content/css"> 
<File>~/Content/site.css</File> 
</Style> 
</Styles> 
</root>

代码文件:BundleConfig.cs
public class BundleConfig 
{ 
public static string BundleConfigPath = "~/Config/BundleConfig.xml"; 
/// <summary> 
/// Register Bundles From XML 
/// </summary> 
/// <param name="bundles"></param> 
public static void RegisterBundles(BundleCollection bundles) 
{ 
XmlDocument doc = new XmlDocument(); 
doc.Load(HttpContext.Current.Server.MapPath(BundleConfigPath)); 
XmlNode root = doc.DocumentElement; 
// Regester Script 
XmlNodeList ScriptList = root.SelectNodes("Scripts/Script"); 
if (ScriptList != null && ScriptList.Count > 0) 
{ 
foreach (XmlNode node in ScriptList) 
{ 
string path = CheckNodeRegedit(node); 
if (string.IsNullOrEmpty(path)) continue; 
var bound = new ScriptBundle(path); 
List<string> files = GetFilesFormNode(node); 
if (files.Count > 0) 
{ 
bound.Include(files.ToArray()); 
bundles.Add(bound); 
} 
} 
} 
// Regester Style 
XmlNodeList StyleList = root.SelectNodes("Styles/Style"); 
if (StyleList != null && StyleList.Count > 0) 
{ 
foreach (XmlNode node in StyleList) 
{ 
string path = CheckNodeRegedit(node); 
if (string.IsNullOrEmpty(path)) continue; 
var bound = new StyleBundle(path); 
List<string> files = GetFilesFormNode(node); 
if (files.Count > 0) 
{ 
bound.Include(files.ToArray()); 
bundles.Add(bound); 
} 
} 
} 
doc = null; 
} 
/// <summary> 
/// 如果内容为空则不添加 
/// </summary> 
/// <param name="node"></param> 
/// <returns></returns> 
private static List<string> GetFilesFormNode(XmlNode node) 
{ 
List<string> files = new List<string>(); 
foreach (XmlNode nodeFile in node.ChildNodes) 
{ 
if (!string.IsNullOrEmpty(nodeFile.InnerText.Trim())) 
files.Add(nodeFile.InnerText.Trim()); 
} 
return files; 
} 
/// <summary> 
/// 检查注册的Node 
/// </summary> 
/// <param name="node"></param> 
/// <returns></returns> 
private static string CheckNodeRegedit(XmlNode node) 
{ 
XmlAttribute pathAtt = node.Attributes["Path"]; 
string path = string.Empty; 
if (pathAtt == null || string.IsNullOrEmpty(pathAtt.Value.Trim()) || node.ChildNodes.Count == 0) 
return string.Empty; 
else 
return pathAtt.Value.Trim(); 
} 
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: