ASP.NET MVC下Bundle的使用方法
ASP.NET MVC中Bundle是用于打包捆綁資源的(一般是css和js),它是在全局文件Global.asax.cs中注冊(cè)Bundle,而注冊(cè)的具體實(shí)現(xiàn)默認(rèn)是在App_Start文件夾的BundleConfig.cs中
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
BundleConfig.RegisterBundles(BundleTable.Bundles); 在應(yīng)用程序啟用時(shí)注冊(cè)Bundle
public class BundleConfig
{
// 有關(guān)綁定的詳細(xì)信息,請(qǐng)?jiān)L問(wèn) http://go.microsoft.com/fwlink/?LinkId=301862
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.validate*"));
// 使用要用于開(kāi)發(fā)和學(xué)習(xí)的 Modernizr 的開(kāi)發(fā)版本。然后,當(dāng)你做好
// 生產(chǎn)準(zhǔn)備時(shí),請(qǐng)使用 http://modernizr.com 上的生成工具來(lái)僅選擇所需的測(cè)試。
bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
"~/Scripts/modernizr-*"));
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
"~/Scripts/bootstrap.js",
"~/Scripts/respond.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css"));
}
}
為了便于說(shuō)明,這里在HomeController下新建一個(gè)Action,如下:
public ActionResult BundleTest()
{
return View();
}
這里以使用Bootstrap為例,在視圖中使用@Styles.Render() 和@Scripts.Render() 引入css和js,參數(shù)是在BundleConfig注冊(cè)的名稱(chēng)
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>BundleTest</title>
@Styles.Render("~/Content/css")
</head>
<body>
@Scripts.Render("~/bundles/jquery", "~/bundles/bootstrap")
</body>
</html>
瀏覽頁(yè)面,查看源代碼,可以看到:

bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css"));
由于在BundleConfig.cs中注冊(cè)上面的Bundle,@Styles.Render("~/Content/css")渲染時(shí)是引入~/Content/bootstrap.css和~/Content/site.css,js的渲染同理
為了驗(yàn)證是否真正引入了BootStrap的css與js資源,這里添加了一些簡(jiǎn)單的BootStrap示例代碼,如下:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>BundleTest</title>
@Styles.Render("~/Content/css")
</head>
<body>
<div class="container">
<div class="header clearfix">
<nav>
<ul class="nav nav-pills pull-right">
<li role="presentation" class="active"><a href="#">首頁(yè)</a></li>
<li role="presentation"><a href="#">關(guān)于我們</a></li>
<li role="presentation"><a href="#">聯(lián)系我們</a></li>
</ul>
</nav>
</div>
<form class="form-horizontal">
<div class="form-group">
<label for="username" class="col-sm-2 control-label">用戶(hù)名</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="username" placeholder="用戶(hù)名">
</div>
</div>
<div class="form-group">
<label for="password" class="col-sm-2 control-label">密碼</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="password" placeholder="密碼">
</div>
</div>
<div class="form-group">
<label for="code" class="col-sm-2 control-label">驗(yàn)證碼</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="code" placeholder="驗(yàn)證碼">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
<label>
<input type="checkbox"> 記住我
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">登錄</button>
</div>
</div>
</form>
<footer class="footer">
<p>© 2017 Zhong.</p>
</footer>
</div> <!-- /container -->
@Scripts.Render("~/bundles/jquery", "~/bundles/bootstrap")
</body>
</html>
前臺(tái)瀏覽看效果(當(dāng)瀏覽器足夠大時(shí)是橫向平鋪的,如果將瀏覽器縮小,則是垂直平鋪,示例中的表單部分最能體現(xiàn)出來(lái)):


改進(jìn)
上面的Bundle是引入了未壓縮的css和js資源,但在實(shí)際應(yīng)用中,出于為了減輕服務(wù)器負(fù)載等原因,需要引入壓縮版的資源(一般是在未壓縮的命名后面加上min來(lái)命名,如jquery.js的壓縮版【有些叫法是精簡(jiǎn)版】是jquery.min.js)
于是修改BundleConfig.cs

重新編譯,再次瀏覽剛才的頁(yè)面,這時(shí)發(fā)現(xiàn)引入了壓縮版的資源(css/js)
注:由于示例時(shí)使用了ASP.NET MVC 5( .Net Framework 4.5),而在.net framework 4中的asp.net mvc 4可能會(huì)有下面的情況:
在頁(yè)面查看源代碼時(shí)發(fā)現(xiàn)腳本缺少引入~/Scripts/bootstrap.min.js,這是asp.net mvc 4使用的System.Web.Optimization.dll默認(rèn)使用了忽略規(guī)則*.min.js,這時(shí)可以在BundleConfig.cs的RegisterBundles中清除忽略規(guī)則

該解決方法一是通過(guò)反編譯System.Web.Optimization.dll并結(jié)合反編譯的代碼得出來(lái)的,另外也可以參考這個(gè)鏈接
另外就是在部署生產(chǎn)環(huán)境時(shí)發(fā)現(xiàn)無(wú)效,因?yàn)樯a(chǎn)環(huán)境不再是debug模式,此時(shí)需要設(shè)置:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
asp.net發(fā)送郵件實(shí)現(xiàn)方法
這篇文章主要介紹了asp.net發(fā)送郵件實(shí)現(xiàn)方法,以一個(gè)具體實(shí)例的形式詳細(xì)講述了asp.net發(fā)送郵件的技巧,需要的朋友可以參考下2014-10-10
ASP.NET:一段比較經(jīng)典的多線(xiàn)程學(xué)習(xí)代碼
ASP.NET:一段比較經(jīng)典的多線(xiàn)程學(xué)習(xí)代碼...2006-09-09
asp.net的web頁(yè)面(aspx)數(shù)據(jù)量過(guò)多時(shí)提交失敗對(duì)策
asp.net的web頁(yè)面,數(shù)據(jù)量過(guò)多時(shí)提交失敗的情況想必有很多朋友都有遇到過(guò)吧,下面與大家分享下詳細(xì)的解決方法2013-05-05
如何對(duì)ASP.NET網(wǎng)站實(shí)現(xiàn)靜態(tài)化
對(duì)于訪(fǎng)問(wèn)量比較大的網(wǎng)站,網(wǎng)頁(yè)靜態(tài)化是一個(gè)比較可靠的解決方案。靜態(tài)化將顯著降低服務(wù)器的壓力,提升服務(wù)器處理能力。下面將介紹兩種不同的實(shí)現(xiàn)方法,并進(jìn)行對(duì)比。2015-09-09
基于asp.net下使用jquery實(shí)現(xiàn)ajax的解決方法
本文以最簡(jiǎn)單的方法為新手示范如何使用jquery實(shí)現(xiàn)ajax技術(shù)(所以本文是專(zhuān)為新手所寫(xiě),老鳥(niǎo)勿噴,大神此處省略一萬(wàn)字)。至于什么是jquery什么是ajax,自己谷歌去2013-05-05
.Net通過(guò)TaskFactory.FromAsync簡(jiǎn)化APM
這篇文章介紹了.Net通過(guò)TaskFactory.FromAsync簡(jiǎn)化APM的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
Asp.Net Core對(duì)接釘釘群機(jī)器人的完整步驟記錄
這篇文章主要給大家介紹了關(guān)于Asp.Net Core對(duì)接釘釘群機(jī)器人的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
asp.net?core?+?jenkins?實(shí)現(xiàn)自動(dòng)化發(fā)布功能
這篇文章主要介紹了asp.net?core?+?jenkins?實(shí)現(xiàn)自動(dòng)化發(fā)布功能,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04

