2013-02-17 37 views
1

我有這樣的:ASP.NET MVC - 在釋放模式產生怪異的風格

bundles.Add(new StyleBundle("~/Content/Styles/Default").Include("~/Content/Styles/Default/Site.css")); 

在我的網站,我有這樣的:

@section Styles 
{ 
    @Styles.Render("~/Content/Styles/Default")) 
} 

我_Layout.cshtml看起來是這樣的:

@RenderSection("Styles", true) 

一切看起來不錯,呃?那麼,不是真的。當我編譯我在釋放模式的應用,決定出版它,這就是它呈現:

<link href="/Content/Styles/Default?v=78dkNySP_xsiuzsgxCx_GGnnHzYS-B8nNdnXqcl47XI1" rel="stylesheet"> 

產生的href到文件代替,它產生某種ID的? GUID?爲什麼? O.o

+1

大概是這樣,瀏覽器將獲得最新版本,而不是掛在緩存的版本上。 – 2013-02-17 20:21:33

+3

這就是'Styles.Render'如何在發佈模式下工作...我強烈建議你閱讀他的特色你試圖使用[捆綁和縮小](http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification) – nemesv 2013-02-17 20:23:03

+0

但我的瀏覽器無法閱讀!沒有文件的物理路徑! – ojek 2013-02-17 20:27:11

回答

3

這是捆綁的工作方式。它的主要目的是將多個CSS(和JS文件)文件組合成一個包。例如你不再需要把你所有的css(和js)放到一個大文件中。只需將它分成幾個部分,然後將其添加到捆綁包中,然後將其打包成一個項目。網頁請求越少,頁面加載時間就越快。

例如可以說你有2個CSS文件。一個是主要的,但你有一個用於你的菜單系統。

bundles.Add(new StyleBundle("~/Content/Styles/Default").Include(
     "~/Content/Styles/Default/Site.css", 
     "~/Content/Styles/Default/Menu.css")); 

這將顯示爲與GUID類型代碼的單個調用(以防止文件的更改緩存)的URL。這個URL將鏈接到縮小和捆綁的CSS。

但我的瀏覽器無法閱讀!沒有文件的物理路徑!

這是一種虛擬文件。 MVC的綁定使用路由引擎將其指向粒子束的組合和縮小版本。