Asp.net MVC在View里动态捆绑压缩引用的js
前言
Asp.net MVC 4以上版本多了BundleConfig.RegisterBundles方法,可以把要捆绑的脚本或样式进行捆绑压缩,以减少客户端的请求次数从而提高了客户端的访问速度。
问题
但世上懒人的数量还是很多,我也是一个,觉得这个方法还不够方便。在实际中,一些小的页面或独立页面,开了一些开源的js库之后,js文件比较多,而且每个页面引用的js又不太一样,如果能不在BundleConfig描述如何捆绑,像传统一样把js拉过来就能自动达到捆绑后的效果,是懒人多想要的结果。正是朝着这个目标,本随笔将实现一个html的扩展方法,来完成这个功能。你只要像传统一样把js拉到view上,改几个字符,就可以达到了效果了,引入的js还是有智能提示的。
调用方法
@Html.BundleScripts(
@<script src="~/Scripts/jquery-1.7.1.min.js"></script>,
@<script src="~/Scripts/login.js"></script>,
@<script src="~/Content/validBox/validBox.js"></script>
)
如上,把要捆绑的js都当BundleScripts的参数就可以了,效果如下:
BundleScripts的实现
/// <summary>
/// 动态捆绑多个脚本
/// </summary>
/// <param name="htmlHelper"></param>
/// <param name="scripts">javscript</param>
/// <returns></returns>
public static IHtmlString BundleScripts(this HtmlHelper htmlHelper, params Func<object, object>[] scripts)
{
if (scripts == null)
{
throw new ArgumentNullException("scripts");
} var inputs = new StringBuilder();
foreach (var script in scripts)
{
inputs.AppendLine(script.Invoke(null).ToString().ToLower());
} var applicationPath = htmlHelper.ViewContext.HttpContext.Request.ApplicationPath;
Func<string, string> fixSrc = (src) => applicationPath == "/" ? "~" + src : src.Replace(applicationPath, "~/"); var srcs = inputs.ToString().Matches(@"(?<=src="").+?\.js(?="")").Select(item => fixSrc(item)).ToArray();
var path = string.Format("~/{0}", Math.Abs(string.Join(string.Empty, srcs).GetHashCode())); if (BundleTable.Bundles.GetBundleFor(path) == null)
{
BundleTable.Bundles.Add(new ScriptBundle(path).Include(srcs));
}
return Scripts.Render(path);
}
注:Matches方法是一个对正则表达式的包装。
提问和思考
你觉得此方法的关键之处在哪里?欢迎提问,我们一起探讨,最好能实现一个比此方法更方便的方法来。
Asp.net MVC在View里动态捆绑压缩引用的js的更多相关文章
- Asp.net MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html
Asp.net MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html 1.前言 上一篇文章我开源了轮子,Asp.net Core 3.1 Razor视图模版动态渲染PDF,然后,很 ...
- Asp.net mvc 中View 的呈现(二)
[toc] 上一节介绍了 Asp.net mvc 中除 ViewResult 外的所有的 ActionResult,这一节介绍 ViewResult. ViewResultBase ViewResul ...
- TransactionScope事务处理方法介绍及.NET Core中的注意事项 SQL Server数据库漏洞评估了解一下 预热ASP.NET MVC 的VIEW [AUTOMAPPER]反射自动注册AUTOMAPPER PROFILE
TransactionScope事务处理方法介绍及.NET Core中的注意事项 作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10170712.ht ...
- 返璞归真 asp.net mvc (4) - View/ViewEngine
原文:返璞归真 asp.net mvc (4) - View/ViewEngine [索引页] [源码下载] 返璞归真 asp.net mvc (4) - View/ViewEngine 作者:web ...
- ASP.NET MVC 之View
仅此一文让你明白ASP.NET MVC 之View的显示(仅此一文系列二) 题外话 一周之前写的<仅此一文让你明白ASP.NET MVC原理>受到了广大学习ASP.NET MVC同学的 ...
- ASP.NET MVC 中 View 的设计
1. 前言 感觉有好长时间没有接触View 了,周末闲来无事,翻翻书桌上的书来回顾回顾ASP.NET MVC中View的相关内容. 2. View概述 View 通过应用程序在Action 中返回 ...
- 预热ASP.NET MVC 的View
ASP.NET MVC 的View 预设是Load on Demand(按需加载),也就是说View 第一次要Render 的时候才会去载入跟编译,这个就会造成一个现象,即使Web 应用程式已经完成启 ...
- Asp.Net MVC向视图View传值的三种方法
本文将总结Asp.Net MVC向视图View传值的三种常见的方法: ----------------------------------------------------------------- ...
- ASP.NET MVC 4使用Bundle的打包压缩JS/CSS
打包(Bundling)及压缩(Minification)指的是将多个js文件或css文件打包成单一文件并压缩的做法,如此可减少浏览器需下载多个文件案才能完成网页显示的延迟感,同时通过移除JS/CSS ...
随机推荐
- ehcache入门
一.简介 ehcache是一个开源的,纯java进程内的缓存框架.它具有快速,简单,具有多种缓存策略等特点. Hibernate中默认就是用了ehcache.在我们的应用中使用ehcache可以快速地 ...
- mysql管理(一)
创建数据库,并指定默认字符集和排序规则:help create database;create {database|schema} [if not exists] db_name [character ...
- [转载]在iTOP-4412开发板上调试helloworld应用
本文转自迅为论坛:http://www.topeetboard.com 1.安装ADB驱动 在开发板上调试 Android 应用,首先要安装 ADB 驱动. 通过“SDK Manager.exe”来安 ...
- [cocos2dx]利用NDK崩溃日志查找BUG
摘要: 在android上开发c++应用, crash日志都是汇编码, 很难对应到c++代码中去. 通过此文, 你可以定位到程序崩溃时的C++代码, 精确查找问题. 博客: http://www.cn ...
- OpenCV的安装与系统环境变量
OpenCV的安装与系统环境变量 安装OpenCV本来是很简单的一件事,但配置却很麻烦.而且在配置过程中尤为重要的步骤就是系统环境变量的配置.我使用的是CodeBlick13.12与OpenCV1.0 ...
- UVA-10269 (floyd+dijkstra)
题意: 现在有A个村庄,B个城堡,现在要从1到A+B,有M条路,魔法鞋最多能用K次,每次的长度不超过L,且起点和终点一定是村庄和城堡,而且每次使用魔法鞋不能穿过城堡,问最短时间是多少; 思路: 先用F ...
- jquery实现整屏翻屏效果:jquery.mousewheel(一)
实现整屏上下翻效果:需加载的js <script type="text/javascript" src="js/jquery-1.8.3.min.js"& ...
- HDU 4460 Friend Chains --BFS
题意:问给定的一张图中,相距最远的两个点的距离为多少.解法:跟求树的直径差不多,从1 开始bfs,得到一个最远的点,然后再从该点bfs一遍,得到的最长距离即为答案. 代码: #include < ...
- sizeof 和 strlen 的区别
sizeof 和 strlen 都是c/c++ 中常见的符号,他们的功能是判断数组长度.那么他么到底有什么区别 1.sizeof 不是函数,而是一个操作符.字节数的计算在程序编译时进行,而不是在 ...
- Android性能测试工具Emmagee介绍
Emmagee介绍 Emmagee是监控指定被测应用在使用过程中占用机器的CPU.内存.流量资源的性能测试小工具.该工具的优势在于如同windows系统性能监视器类似,它提供的是数据采集的功能,而行为 ...