Asp.net MVC CSS/Javascript Bundle 配置文件
Asp.net mvc 中使用 Web Optimization 可以合并、压缩JS和CSS文件,但是每次修改都要改代码 ~/App_Start/BundleConfig.cs ,遂有了将它挪到配置文件的想法
思路很简单,做一个XML配置文件来保存。
首先,了解一下Bundle有两种,一种是StyleBundle,一种是ScriptBundle,所以配置文件中,需要支持两种;Bundle下的文件,把文件路径加进来就ok了
1)确定XML格式,如下:
<?xml version="1.0" encoding="utf-8" ?>
<bundles xmlns="http://www.mobwiz.net/Schema/BundleConfig">
<cssbundles>
<bundle>
<name>~/content/backstage</name>
<files>
<file>~/Content/bootstrap.min.css</file>
<file>~/Content/bootstrap-theme.min.css</file>
<file>~/Content/bootstrap-datetimepicker.min.css</file>
<file>~/Content/treetable/jquery.treetable.css</file>
<file>~/Content/treetable/jquery.treetable.theme.default.css</file>
<file>~/Content/admin.css</file>
<file>~/Content/uploadify.css</file>
</files>
</bundle>
<bundle>
<name>~/content/portal</name>
<files>
<file>~/Content/bootstrap.min.css</file>
<file>~/Content/bootstrap-theme.min.css</file>
<file>~/Content/portal.css</file>
</files>
</bundle>
</cssbundles>
<scriptbundles>
<bundle>
<name>~/script/backjs</name>
<files>
<file>~/Scripts/jquery-1.11.2.min.js</file>
<file>~/Scripts/bootstrap.min.js</file>
<file>~/Scripts/jquery.cookie.js</file>
<file>~/Scripts/jquery.validate.min.js</file>
<file>~/Scripts/jquery.validate.unobtrusive.min.js</file>
<file>~/Scripts/jquery.validate.unobtrusive.bootstrap.min.js</file>
<file>~/Scripts/jquery.treetable.js</file>
<file>~/Scripts/jquery.uploadify.min.js</file>
<file>~/Scripts/json2.js</file>
<file>~/Scripts/jquery.autosize-min.js</file>
<file>~/Scripts/jquery.ba-bbq.js</file>
<file>~/Scripts/mwext.js</file>
<file>~/Scripts/jquery.uploadify.min.js</file>
<file>~/Scripts/moment.min.js</file>
<file>~/Scripts/moment-with-locales.min.js</file>
<file>~/Scripts/bootstrap-datetimepicker.min.js</file>
<file>~/Scripts/bootstrap-treeview.min.js</file>
</files>
</bundle>
<bundle>
<name>~/script/keditor</name>
<files>
<file>~/kindeditor/kindeditor-all-min.js</file>
<file>~/kindeditor/lang/zh_CN.js</file>
</files>
</bundle>
<bundle>
<name>~/script/fixie</name>
<files>
<file>~/Script/html5shiv.min.js</file>
<file>~/Script/respond.min.js</file>
</files>
</bundle>
</scriptbundles>
</bundles>
2)读取代码
public class BundleConfig
{
// For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862
public static void RegisterBundles(BundleCollection bundles)
{
var path = HttpContext.Current.Server.MapPath("~/App_Data/bundles.config"); XElement rootEL = XElement.Load(path);
XNamespace ns = rootEL.Attribute("xmlns").Value;
Debug.Assert(rootEL != null); var cssBundles = rootEL.Element(ns + "cssbundles");
if (cssBundles != null && cssBundles.HasElements)
{
var list = cssBundles.Elements(ns + "bundle"); if (list != null)
{
foreach (var xElement in list)
{
var name = xElement.Element(ns + "name").Value; var files = xElement.Element(ns + "files").Elements(ns + "file");
var fileList = new List<string>();
foreach (var element in files)
{
fileList.Add(element.Value);
}
bundles.Add(new StyleBundle(name).Include(fileList.ToArray()));
}
}
} var scriptBundles = rootEL.Element(ns + "scriptbundles");
if (scriptBundles != null && scriptBundles.HasElements)
{
var list = scriptBundles.Elements(ns + "bundle");
if (list != null)
{
foreach (var xElement in list)
{
var name = xElement.Element(ns + "name").Value;
var files = xElement.Element(ns + "files").Elements(ns + "file");
var fileList = new List<string>();
foreach (var element in files)
{
fileList.Add(element.Value);
}
bundles.Add(new ScriptBundle(name).Include(fileList.ToArray()));
}
}
}
}
}
这段代码,写得比较粗暴,各位就将就看一下了,原理就是读取xml中的配置,然后添加到BundleConfig中去
3)Schema编写
因为是配置文件,做个Schema,这样用VS编写,也会有语法提示了,避免错误,XSD用XML Spy做的,本来想上传文件的,结果没找到怎么插入一个附件,就贴代码了,复制,保存到一个xsd,放到VS 的 Schema目录下,就 ok了。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.mobwiz.net/Schema/BundleConfig"
xmlns="http://www.mobwiz.net/Schema/BundleConfig"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="bundles">
<xs:annotation>
<xs:documentation>Root element for bundles</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:all>
<xs:element name="cssbundles">
<xs:complexType>
<xs:sequence>
<xs:element name="bundle" type="bundleType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="scriptbundles">
<xs:complexType>
<xs:sequence>
<xs:element name="bundle" type="bundleType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:complexType name="bundleType">
<xs:annotation>
<xs:documentation>Bundle Type</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="files">
<xs:complexType>
<xs:sequence>
<xs:element name="file" type="xs:string" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
4)改动更新
这个还没实现,思路是使用 FileSystemWatcher 监视配置文件,如果文件发生改动,就重新载入这些配置。当然,也可以简单粗暴 的直接重启网站,这样就重新载入了。
5)引用
这个没变化,在页面里用下面的代码调用即可
@Styles.Render("~/content/backstage")
@Scripts.Render("~/script/backjs")
2015.06.17
Asp.net MVC CSS/Javascript Bundle 配置文件的更多相关文章
- Asp.Net MVC 捆绑(Bundle)
Asp.Net MVC 捆绑(Bundle) 大多数浏览器会对同一域名的请求限制请求数量,一般是在8个以内.每次最多可以同时请求8个,要是资源多于8个,那么剩下的就要排队等待请求了.所以为了提高首次加 ...
- ASP.NET MVC 4使用Bundle的打包压缩JS/CSS
打包(Bundling)及压缩(Minification)指的是将多个js文件或css文件打包成单一文件并压缩的做法,如此可减少浏览器需下载多个文件案才能完成网页显示的延迟感,同时通过移除JS/CSS ...
- 【转】asp.net mvc css/js压缩合并 --- combres
转自:http://www.cnblogs.com/zxktxj/archive/2012/05/30/2526246.html NuGet 网站:http://nuget.codeplex.co ...
- Asp.net MVC与Javascript
特性验证 首先:在web.config文件中<appSettings>节点内添加<add key="ClientValidationEnabled" value= ...
- asp.net mvc页面javascript代码中如何使用razor
我们需要用<text>将javascript代码包含起来,强制让razor编译器回到内容模式, 或者将javascript代码放在函数中,让razor编译器可以识别,请看下面两个例子: & ...
- ASP.NET MVC 中使用JavaScriptResult asp.net mvc 返回 JavaScript asp.mvc 后台返回js
return this.Content("<script>alert('暂无!');window.location.href='/Wap/Index';</script&g ...
- 7 天玩转 ASP.NET MVC — 第 7 天
目录 第 1 天 第 2 天 第 3 天 第 4 天 第 5 天 第 6 天 第 7 天 0. 前言 今天是开心的一天.因为我们终于来到了系列学习的最后一节.我相信你喜欢之前的课程,并从中学到了许多. ...
- [引]ASP.NET MVC 4 Content Map
本文转自:http://msdn.microsoft.com/en-us/library/gg416514(v=vs.108).aspx The Model-View-Controller (MVC) ...
- asp.net mvc源码分析-ModelValidatorProviders 客户端的验证
几年写过asp.net mvc源码分析-ModelValidatorProviders 当时主要是考虑mvc的流程对,客户端的验证也只是简单的提及了一下,现在我们来仔细看一下客户端的验证. 如图所示, ...
随机推荐
- 基于epoll封装的事件回调miniserver
epoll技术前两节已经阐述过了,目前主要做一下封装,很多epoll的服务器都是采用事件回调方式处理, 其实并没有什么复杂的,我慢慢给大家阐述下原理. 在networking.h和networking ...
- Prefetch count--预取数量
一.前言 前面提到如果有多个消费者同时订阅同一个Queue中的消息,Queue中的消息会被平摊给多个消费者.这时如果每个消息的处理时间不同,就有可能会导致某些消费者一直在忙,而另外一些消费者很快就处理 ...
- jquery validate 二选一,错误提示在一处
转载自:http://blog.51yip.com/jsjquery/1483.html 有一同事对jquery validate这个插件不熟,实现多处报错信息在一处,并且还有二选一的情况,二个输入框 ...
- python匹配某个中文字符
python2.7对中文的支持不好是众所周知的,现在遇到这样一个需求,要匹配某个中文字符.查了一个资料,思路就是转化为unicode进行比较,记录如下: line = '参考答案: A' # gbk ...
- ① 设计模式的艺术-07.适配器(Adapter)模式
什么是适配器模式? 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 模式中的角色 目标接口(Target):客户所期待的接口 ...
- GridControl详解(一)原汁原味的表格展示
Dev控件中的表格控件GridControl控件非常强大.不过,一些细枝末节的地方有时候用起来不好找挺讨厌的.使用过程中,多半借助Demo和英文帮助文档.网上具体的使用方法也多半零碎.偶遇一个简单而且 ...
- 你知道吗?Java开发的10位牛人
James Gosling 1983年,Gosling获得了加州大学的计算机科学学士学位.1990年,他获得了卡内基梅隆大学的计算机科学博士学位,师从Bob Sproull.在攻读博士期间,他自己开发 ...
- 怎样用javascript关闭本窗口
大家都知道window.close()是用来关闭窗口的,而且ie和firefox都是支持的. 为了实现用户对浏览器的绝对控制,ie中用close关闭非open打开的窗口时回弹出一个对话框询问用户,怎么 ...
- Count on a tree(SPOJ COT + 树上第k大 + 主席树 + LCA)
题目链接:https://www.spoj.com/problems/COT/en/ 题目: 题意: 给你一棵有n个节点的树,求节点u到节点v这条链上的第k大. 思路: 我们首先用dfs进行建题目给的 ...
- NYOJ 141 Squares (数学)
题目链接 描述 A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degre ...