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的流程对,客户端的验证也只是简单的提及了一下,现在我们来仔细看一下客户端的验证. 如图所示, ...
随机推荐
- 图像处理之直方图均衡化及C源码实现
1 直方图均衡化(Histogram Equalization)简介 图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法.直方图拉伸和直方图均衡化是两种最常见的间接 ...
- hibernate、mybatis、spring data 的对比
转: 1.概念: Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库.着力 ...
- python 获取外网地址
def get_ip(): try: url = "http://cn.bing.com/search?q=ip&go=%E6%8F%90%E4%BA%A4&qs=n& ...
- git操作图
- 深入浅出CSS(一):line-height与vertical-align的性质
[测试代码] <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- NOIP模拟赛11
T1 [HAOI2016]放棋子 https://daniu.luogu.org/problem/show?pid=3182 障碍交换行不影响 所以第i列有障碍的行换到第i行 然后错排公式 本校自测要 ...
- 逆推 Gym 101102J
题目链接:http://codeforces.com/gym/101102/problem/J 题目大意可以看这个人的:http://www.cnblogs.com/chen9510/p/593362 ...
- 优先队列 逆向思维 Gym 101128C
题目链接:http://codeforces.com/gym/101128/my 具体题目大意可以看这个人的:http://blog.csdn.net/v5zsq/article/details/61 ...
- Android Studio 更新失败的解决办法
编辑$ANDROID_STUDIO_HOME/bin/ 下的 studio.exe.vmoptions(如果系统用的Ubuntu,文件应该是studio.vmoptions或者如果是64位系统,应该是 ...
- Centos7系统环境下Solr之Java实战(二)制定中文分析器、配置业务域
制定中文分析器 1.把IKAnalyzer2012FF_u1.jar添加到solr工程的lib目录下 2.把扩展词典.配置文件放到solr工程的WEB-INF/classes目录下. 配置一个Fiel ...