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. db2 数据库操作JDBC .addBatch() 方法执行时,报错排查结果

    今天调试db2数据的存储时,jdbc使用addBatch方法时,抛出异常,异常信息如下: [jcc][1091][10404][3.62.56] 数据转换无效:参数实例  对于所请求的转换无效. ER ...

  2. 图片虚拟目录--即图片保存在window硬盘上面

    这个是图片保存在电脑的硬盘上面的图片上传设置,既不是在web工程中,也不是在专门的图片服务器中,下面是配置方法: r 这里的Document base 我们这里设置为F:\images 如果在浏览器访 ...

  3. hihocoder 1580 dp最大子矩阵和

    题意: 给出n*m的矩阵求最大子矩阵和,要求必须把矩阵中的某一个元素替换成p 代码: //求最大子矩阵和,容易想到压缩之后dp但是这道题要求必须替换一次p,必然优先替换最小的. //这样如果求得的结果 ...

  4. HDU 6034 贪心

    Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  5. 「Python」5个开源项目

    1-OpenAI universe Universe是一个能在世界上所有的游戏.网站和其他应用中,衡量和训练AI通用智能的软件平台. Universe,AI代理通过称为虚拟网络计算或VNC发送模拟的鼠 ...

  6. AbstractTransactionalJUnit4SpringContextTests事务回滚

    在单元测试中继承AbstractTransactionalJUnit4SpringContextTests类的 时候,会默认事务回滚. 需要照常执行的话,在执行的测试方法上添加@Rollback(fa ...

  7. Jenkins使用教程之管理节点

    通常的情况下在我们的一个项目当中,项目会有多个分支系统,而我们不可能为每个分支系统都配置一个jenkins服务,这样既浪费资源,也增加构建部署的难度,为了解决这个问题jenkins给使用者提供了非常强 ...

  8. HDU 4704 欧拉定理

    题目看了很久没看懂 就是给你数n,一种函数S(k),S(k)代表把数n拆成k个数的不同方案数,注意如n=3,S(2)是算2种的,最后让你求S(1~n)的和模1e9+7,n<=1e100000.那 ...

  9. 软件测试(三)—— 参数化测试用例(Nextday.java)

    import static org.junit.Assert.*; import java.lang.reflect.Array; import java.util.Arrays; import ja ...

  10. Grass is Green

    Root    3719 - Grass is Green Time limit: 3.000 seconds This year exactly n <tex2html_verbatim_ma ...