1. 程式人生 > >mvc區域下css及js檔案不能訪問的解決

mvc區域下css及js檔案不能訪問的解決

最近又有需要做網站的手機版,因此在areas下建立了MM,當做手機版訪問頁面。由於一些js及css檔案與電腦版的有區別,所以我單獨在/areas/MM下建立了scripts資料夾放置js檔案,建立了Content資料夾放置css檔案。在本地測試沒有問題,但是挪到伺服器上卻發現網頁訪問不正常,載入不了內容。經過分析發現,原來是http://jiaogui.jinrimianshi.com/areas/mm/scripts/global.js和http://jiaogui.jinrimianshi.com/areas/mm/content/site.css報404未發現。嚴格按照建立的檔案及資料夾的大小寫來訪問,並不能解決此問題。

百度搜索,沒有任何答案。

google 搜尋有一個在指令碼連結中使用 @Url.Content,但是經過測試,問題依舊。還有一個建議,就是把css及js檔案都放在areas區域外面。這個我不用試就知道可以,但我不想這樣做。因為這css及js檔案就是針對手機版的,放在外面總感覺怪怪的。而且在本地是沒這個問題啊。

最後又在stackoverflow中找到一篇相關的文章:http://stackoverflow.com/questions/8062153/can-i-deploy-a-javascript-file-within-mvc-areas

這個文章提問題的人認可的答案是把js及css檔案放置到areas外面。但我並不想採用。支援的理由就是我本地和另外一個網站有js及css檔案放置到areas資料夾底下是可以正常訪問的。

我看到了這篇文章介紹的另一個方法。就是在areas/mm/views底下的web.config中增加一些允許js,css檔案訪問的程式碼。

<system.web>
    <httpHandlers>
        <add path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" />
        <add path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" />
        <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>
    <!-- other content here -->
</system.web>

<system.webServer>
    <handlers>
        <remove name="BlockViewHandler"/>
        <add name="JavaScript" path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" />
        <add name="CSS" path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" />
        <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
    <!-- other content here -->
</system.webServer>

如果應用程式池是經典模式,則在system.web/httphandlers節點下增加:

<add path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" />
<add path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" />

如果是整合模式,則在system.webserver/handlers節點下增加:

<add path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" />
<add path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" />

我其實是不想加的,因為本地和另外一個網站我查了下,相應的web.config並沒有相應的程式碼,但是卻可以正常訪問。但是實在沒有辦法,就想試試,由於我的是整合模式,因此我在system.webserver/handlers節點下增加了相應程式碼。然後就準備上床到伺服器上。在上傳到伺服器上的時候,我發現我的本地areas/mm下的web.config在areas/mm/views目錄下面,而伺服器上的相應web.config檔案卻是在areas/mm下,我心裡一動,想到不會是這裡的問題吧。然後把伺服器上areas/mm下的web.config挪到areas/mm/views下,並沒有增加相應程式碼。嘗試訪問,正常了。原來是這裡的問題。web.config位置放錯造成的