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 配置文件的更多相关文章

  1. Asp.Net MVC 捆绑(Bundle)

    Asp.Net MVC 捆绑(Bundle) 大多数浏览器会对同一域名的请求限制请求数量,一般是在8个以内.每次最多可以同时请求8个,要是资源多于8个,那么剩下的就要排队等待请求了.所以为了提高首次加 ...

  2. ASP.NET MVC 4使用Bundle的打包压缩JS/CSS

    打包(Bundling)及压缩(Minification)指的是将多个js文件或css文件打包成单一文件并压缩的做法,如此可减少浏览器需下载多个文件案才能完成网页显示的延迟感,同时通过移除JS/CSS ...

  3. 【转】asp.net mvc css/js压缩合并 --- combres

    转自:http://www.cnblogs.com/zxktxj/archive/2012/05/30/2526246.html NuGet   网站:http://nuget.codeplex.co ...

  4. Asp.net MVC与Javascript

    特性验证 首先:在web.config文件中<appSettings>节点内添加<add key="ClientValidationEnabled" value= ...

  5. asp.net mvc页面javascript代码中如何使用razor

    我们需要用<text>将javascript代码包含起来,强制让razor编译器回到内容模式, 或者将javascript代码放在函数中,让razor编译器可以识别,请看下面两个例子: & ...

  6. ASP.NET MVC 中使用JavaScriptResult asp.net mvc 返回 JavaScript asp.mvc 后台返回js

    return this.Content("<script>alert('暂无!');window.location.href='/Wap/Index';</script&g ...

  7. 7 天玩转 ASP.NET MVC — 第 7 天

    目录 第 1 天 第 2 天 第 3 天 第 4 天 第 5 天 第 6 天 第 7 天 0. 前言 今天是开心的一天.因为我们终于来到了系列学习的最后一节.我相信你喜欢之前的课程,并从中学到了许多. ...

  8. [引]ASP.NET MVC 4 Content Map

    本文转自:http://msdn.microsoft.com/en-us/library/gg416514(v=vs.108).aspx The Model-View-Controller (MVC) ...

  9. asp.net mvc源码分析-ModelValidatorProviders 客户端的验证

    几年写过asp.net mvc源码分析-ModelValidatorProviders 当时主要是考虑mvc的流程对,客户端的验证也只是简单的提及了一下,现在我们来仔细看一下客户端的验证. 如图所示, ...

随机推荐

  1. 如何将下载的web工程导入到eclipse中使用

    如果你是喜欢编程的,在你的开发工具中一定有许多项目,就像小编一样(PS:小编只想默默地装一X):   我们选中其中的一个项目,然后[Ctrl + C]复制,再[Ctrl + V]粘贴到桌面:   那么 ...

  2. vim切换显示器乱行问题解决

    http://note.youdao.com/noteshare?id=ccdad950ca154a6b1597cbe2ede07b81

  3. STL源码分析-rotate

    http://note.youdao.com/noteshare?id=4ba8ff81aa96373ba11f1b82597ec73a

  4. Java设计模式の模版方法模式

    概述 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的 ...

  5. 很好的脑洞题:dfs+暴力 Gym - 101128A Promotions

    http://codeforces.com/gym/101128 题目大意:给你一个a,b,e,p.有e个点,p条有向边,每条边为(x,y),表示x->y,每次我们都取出一个入度为0的,并且一次 ...

  6. C11线程管理:条件变量

    1.简介 C11提供另外一种用于等待的同步机制,它可以阻塞一个或者多个线程,直到收到另外一个线程发出的通知或者超时,才会唤醒当前阻塞的线程.条件变量要和互斥量配合起来使用. condition_var ...

  7. Linux命令之uptime

    这是什么 uptime用来查看系统已经启动了多长时间了. 它显示的信息和w命令的头(第一行)是一样一样的. 举个栗子 举一个实际的应用场景: 比如发现服务器上的某些没有加入开机启动的服务挂了一片,这个 ...

  8. 25、Python垃圾回收机制?

    Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾.在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的 ...

  9. ecshop代码修改后提交,无法立即生效

    今天帮一朋友部署一网站.成品的ecshop模版站.在搭建好xammp集成环境,导入数据库,修改配置文件后,报了一大堆错. 其中第一个是关于废弃preg_replace中/e这种用法的,因为存在漏洞,一 ...

  10. xshell5破解版下载

    http://www.pc6.com/softview/SoftView_507840.html