ASP.NET MVC 使用Bootstrap的方法
作為一名Web開(kāi)發(fā)者而言,如果不借助任何前端框架,從零開(kāi)始使用HTML和CSS來(lái)構(gòu)建友好的頁(yè)面是非常困難的。特別是對(duì)于Windows Form的開(kāi)發(fā)者而言,更是難上加難。
正是由于這樣的原因,Bootstrap誕生了。Twitter Bootstrap為開(kāi)發(fā)者提供了豐富的CSS樣式、組件、插件、響應(yīng)式布局等。同時(shí)微軟已經(jīng)完全集成在ASP.NET MVC 模板中。
Bootstrap結(jié)構(gòu)介紹
你可以通過(guò)http://getbootstrap.com.來(lái)下載最新版本的Bootstrap。
解壓文件夾后,可以看到Bootstrap的文件分布結(jié)構(gòu)如下,包含3個(gè)文件夾:
- css
- fonts
- js
css文件夾中包含了4個(gè).css文件和2個(gè).map文件。我們只需要將bootstrap.css文件包含到項(xiàng)目里這樣就能將Bootstrap應(yīng)用到我們的頁(yè)面中了。bootstrap.min.css即為上述css的壓縮版本。
.map文件不必包含到項(xiàng)目里,你可以將其忽略。這些文件被用來(lái)作為調(diào)試符號(hào)(類(lèi)似于Visual Studio中的.pdb文件),最終能讓開(kāi)發(fā)人員在線編輯預(yù)處理文件。
Bootstrap使用Font Awesome(一個(gè)字體文件包含了所有的字形圖標(biāo),只為Bootstrap設(shè)計(jì))來(lái)顯示不同的圖標(biāo)和符號(hào),fonts文件夾包含了4類(lèi)的不同格式的字體文件:
- Embedded OpenType (glyphicons-halflings-regular.eot)
- Scalable Vector Graphics (glyphicons-halflings-regular.svg)
- TrueType font (glyphicons-halflings-regular.ttf)
- Web Open Font Format (glyphicons-halflings-regular.woff)
建議將所有的字體文件包含在你的Web應(yīng)用程序中,因?yàn)檫@能讓你的站點(diǎn)在不同的瀏覽器中顯示正確的字體。
EOT字體格式文件需要IE9及以上瀏覽器支持,TTF是傳統(tǒng)的舊字體格式文件,WOFF是從TTF中壓縮得到的字體格式文件。如果你只需要支持IE8之后的瀏覽器、iOS 4以上版本、同時(shí)支持Android,那么你只需要包含WOFF字體即可。
js文件夾包含了3個(gè)文件,所有的Bootstrap插件被包含在boostrap.js文件中,bootstrap.min.js即上述js的壓縮版本,npm.js通過(guò)項(xiàng)目構(gòu)建工具Grunt自動(dòng)生成。
在引用boostrap.js文件之前,請(qǐng)確保你已經(jīng)引用了JQuery庫(kù)因?yàn)樗械腂ootstrap插件需要JQuery。
在ASP.NET MVC 項(xiàng)目中添加Bootstrap文件
打開(kāi)Visual Studio 2013,創(chuàng)建標(biāo)準(zhǔn)的ASP.NET MVC項(xiàng)目,默認(rèn)情況下已經(jīng)自動(dòng)添加了Bootstrap的所有文件,如下所示:
說(shuō)明微軟對(duì)于Bootstrap是非常認(rèn)可的,高度集成在Visual Studio中。
值得注意的是,在Scripts文件中添加了一個(gè)名為_(kāi)references.js的文件,這是一個(gè)非常有用的功能,當(dāng)我們?cè)谑褂肂ootstrap等一些前端庫(kù)時(shí),它可以幫助Visual Studio啟用智能提示。
當(dāng)然我們也可以創(chuàng)建一個(gè)空的ASP.NET MVC項(xiàng)目手動(dòng)去添加這些依賴(lài)文件,正如下圖所示這樣,選擇空的模板:
對(duì)于新創(chuàng)建的空白ASP.NET MVC項(xiàng)目來(lái)說(shuō),沒(méi)用Content,F(xiàn)onts,Scripts文件夾——我們必須手動(dòng)去創(chuàng)建他們,如下所示:
當(dāng)然,也可以用Nuget來(lái)自動(dòng)添加Bootstrap資源文件。如果使用圖形界面來(lái)添加Bootstrap Nuget Package,則直接搜索Bootstrap即可;如果使用Package Manager Console來(lái)添加Bootstrap Nuget Package,則輸入Install-Package bootstrap。
為網(wǎng)站創(chuàng)建Layout布局頁(yè)
為了讓我們的網(wǎng)站保持一致的風(fēng)格,我將使用Bootstrap來(lái)構(gòu)建Layout布局頁(yè)。在Views文件夾創(chuàng)建MVC Layout Page(Razor)布局文件,如下圖所示:
在新創(chuàng)建的Layout布局頁(yè)中,使用如下代碼來(lái)引用Bootstrap資源文件。
<link href="@Url.Content(" rel="external nofollow" rel="external nofollow" ~/css/bootstrap.css")" rel="stylesheet"> <script src="@Url.Content("~/js/bootstrap.js")"></script>
其中使用 @Url.Content 會(huì)將虛擬或者相對(duì)路徑轉(zhuǎn)換為絕對(duì)路徑,這樣確保Bootstrap資源文件被引用。
新建一個(gè)名為Home的Controller,并且添加默認(rèn)Index的視圖,使其套用上述的Layout布局頁(yè)面,如下所示:
使用捆綁打包和壓縮來(lái)提升網(wǎng)站性能
捆綁打包(bundling)和壓縮(minification)是ASP.NET中的一項(xiàng)新功能,允許你提升網(wǎng)站加載速度,這是通過(guò)限制請(qǐng)求CSS和JavaScript文件的次數(shù)來(lái)完成的。本質(zhì)上是將這類(lèi)文件結(jié)合到一個(gè)大文件以及刪除所有不必要的字符(比如:注釋、空格、換行)。
對(duì)于大多數(shù)現(xiàn)代瀏覽器訪問(wèn)一個(gè)主機(jī)名都有6個(gè)并發(fā)連接的極限,這意味著如果你在一張頁(yè)面上引用了6個(gè)以上的CSS、JavaScript文件,瀏覽器一次只會(huì)下載6個(gè)文件。所以限制資源文件的個(gè)數(shù)是個(gè)好辦法,真正意義上的使命必達(dá),而不是浪費(fèi)在加載資源上。
在Bootstrap項(xiàng)目中使用捆綁打包
因?yàn)槲覀儎?chuàng)建的是空的ASP.NET MVC項(xiàng)目,所以并沒(méi)有自動(dòng)引用與打包相關(guān)的程序集。打開(kāi)Nuget Package Manager Console來(lái)完成對(duì)Package的安裝,使用如下PowerShell命令:
install-package Microsoft.AspNet.Web.Optimization 來(lái)安裝Microsoft.AspNet.Web.Optimization NuGet package以及它依賴(lài)的Package,如下所示:
在安裝完成后,在App_Start中添加 BundleConfig類(lèi):
public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/bootstrap/js").Include( "~/js/bootstrap.js", "~/js/site.js")); bundles.Add(new StyleBundle("~/bootstrap/css").Include( "~/css/bootstrap.css", "~/css/site.css")); }
ScriptBundle和StyleBundle對(duì)象實(shí)例化時(shí)接受一個(gè)參數(shù)用來(lái)代表打包文件的虛擬路徑,Include顧名思義將你需要的文件包含到其中。
然后在Application_Start方法中注冊(cè)它:
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); BundleTable.EnableOptimizations = true; }
記住,不要去包含.min類(lèi)型的文件到打包文件中,比如bootstrap.min.css、bootstrap.min.js,編譯器會(huì)忽略這些文件因?yàn)樗麄円呀?jīng)被壓縮過(guò)了。
在ASP.NET MVC 布局頁(yè)使用@Styles.Render("~/bootstrap/css")、@Scripts.Render("~/bootstrap/js")來(lái)添加對(duì)打包文件的引用。
如果Visual Studio HTML編輯器表明無(wú)法找到Styles和Scripts對(duì)象,那就意味著你缺少了命名空間的引用,你可以手動(dòng)在布局頁(yè)的頂部添加System.Web.Optimization 命名空間,如下代碼所示:
@using System.Web.Optimization <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>@ViewBag.Title</title> @*<link href="@Url.Content(" rel="external nofollow" rel="external nofollow" ~/css/bootstrap.css")" rel="stylesheet"> <script src="@Url.Content("~/js/bootstrap.js")"></script>*@ @Scripts.Render("~/bootstrap/js") @Styles.Render("~/bootstrap/css") </head> <body> <div> @*@RenderBody()*@ </div> </body> </html>
當(dāng)然為了通用性,最佳的實(shí)踐是在Views文件夾的web.config中添加System.Web.Optimization名稱(chēng)空間的引用,如下所示:
<namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> <add namespace="Bootstrap.Web" /> <add namespace="System.Web.Optimization" /> </namespaces>
測(cè)試打包和壓縮
為了使用打包和壓縮,打開(kāi)網(wǎng)站根目錄下的web.config文件,并且更改compilation元素的dubug屬性為false,即為release。
<system.web> <compilation debug="false" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web>
當(dāng)然你可以在Application_Start方法中設(shè)置BundleTable.EnableOptimizations = true來(lái)同樣達(dá)到上述效果(它會(huì)override web.config中的設(shè)置,即使debug屬性為true)。
最后瀏覽網(wǎng)頁(yè),查看源代碼,可以清楚看到打包文件的路徑是之前定義過(guò)的相對(duì)路徑,點(diǎn)擊這個(gè)鏈接,瀏覽器為我們打開(kāi)了經(jīng)過(guò)壓縮處理過(guò)后的打包文件,如下圖所示:
小結(jié)
在這一章節(jié)中,簡(jiǎn)單為大家梳理了Bootstrap的體系結(jié)構(gòu),然后怎樣在ASP.NET MVC項(xiàng)目中添加Bootstrap,最后使用了打包和壓縮技術(shù)來(lái)實(shí)現(xiàn)對(duì)資源文件的打包,從而提高了網(wǎng)站的性能。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
.NET framework 4.0 安裝失敗回滾問(wèn)題
這篇文章主要介紹了.NET framework 4.0 安裝失敗回滾問(wèn)題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12詳解.NET Core中的數(shù)據(jù)保護(hù)組件
在本篇文章中我們給大家整理了關(guān)于返回主頁(yè).NET Core中的數(shù)據(jù)保護(hù)組件的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們參考下。2018-09-09微信小程序基于騰訊云對(duì)象存儲(chǔ)的圖片上傳功能
這篇文章主要介紹了微信小程序基于騰訊云對(duì)象存儲(chǔ)的圖片上傳功能,需要的朋友可以參考下2018-03-03ASP.Net Core中使用枚舉類(lèi)而不是枚舉的方法
這篇文章主要給大家介紹了關(guān)于ASP.Net Core中使用枚舉類(lèi)而不是枚舉的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ASP.Net Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06asp.net中C#實(shí)現(xiàn)手動(dòng)回收內(nèi)存的方法
這篇文章主要介紹了asp.net中C#實(shí)現(xiàn)手動(dòng)回收內(nèi)存的方法,包括System.GC.Collect方法的使用及緩存技術(shù)的分析,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12asp.net輸出重寫(xiě)壓縮頁(yè)面文件實(shí)例代碼
這篇文章主要介紹了asp.net輸出重寫(xiě)壓縮頁(yè)面文件實(shí)例代碼,需要的朋友可以參考下2014-02-02ASP.NET Mvc開(kāi)發(fā)之查詢(xún)數(shù)據(jù)
這篇文章主要介紹了ASP.NET Mvc開(kāi)發(fā)之查詢(xún)數(shù)據(jù)的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-02-02.NET命令行解析器示例程序(命令行選項(xiàng)功能)
經(jīng)常需要開(kāi)發(fā)一下小工具,之前都是自己解析命令行參數(shù),接觸過(guò)動(dòng)態(tài)語(yǔ)言社區(qū)以后,發(fā)現(xiàn)命令行解析有特定的模式和框架可以利用,本文介紹一個(gè).NET 平臺(tái)的類(lèi)庫(kù)CommandLineParser2013-11-11