MVC 項目中為什么會有兩個web.config


  我們對MVC 並不陌生, 在創建MVC項目時,總會發現,在工程目錄 中有兩個 web.config 文件,一個是在工程的根目錄下,一是在 views 下,兩個web.config 中的內容也不盡相同,那么為什么會有兩個 web.config 文件,這就是這篇隨筆將要說明的。

  1. 根目錄下的 web.config 文件

   根目錄下的web.config 文件是對根目錄下的所有文件起作用,在打開根目錄下的 web.config 文件時,你會發現web.config 為所有的路徑或動作注冊了  HttpNotFoundHandler,

1
<add path= "*"  verb= "*"  type= "System.Web.HttpNotFoundHandler" />

   或者在 IIS7中,它可能是這么定義的

1
2
<add name= "BlockViewHandler"  path= "*.aspx"  verb= "*"
     preCondition= "integratedMode"  type= "System.Web.HttpNotFoundHandler" />

   另外,你還可以添加自定義出錯頁面,或一些配置信息,如數據庫的連接,鍵-值對等,工程中的一些配置就是從根目錄下的 web.config 中讀取的。一些必要的程序集也是在根目錄下注冊的,當運行項目時,mvc 框架會根據根目錄下的 web.config 文件中注冊的程序集文件進行加載,包括程序集的版本號,密鑰等

 

  2.  Views 下的 web.config 文件

    Views 下的 web.config 主要作用於視圖,阻止通過 Controller 以外的途徑來訪問 Views 文件夾下的視圖,在 MVC 的設計模式中,Controllers 支持路由請求,並返回一個特定的經過渲染的視圖給調用的客戶端。

     如果你想控制 views 下的視圖,那么你就要在 Views 下的 web.config 文件中添加一些特別的設置,如果你在工程中引入的 area 的概念(添加area ),那么在每一個 area 中都會包含一個特別的 web.config 文件,這樣,就可以對每一個 area作一些特別的控制。

   Views 下的視圖,本質上就是一個前端類,它會在我們的視圖引擎第一次找到它的時候將它編譯成一個前端頁面類,編譯完后,就需要將這個前端頁面類繼承一個webViewPage<TModel>的泛型類,或者WebViewPage類  (注:WebViewPage類是webViewPage<TModel>類的父類),該目錄下的web.config 指定了 視圖編譯完后生成的前端頁面類的父類

  打開 web.congig 文件,你會看到以下代碼;

1
2
3
4
5
6
7
8
<pages pageBaseType= "System.Web.Mvc.WebViewPage" >
   <namespaces>
     <add  namespace = "System.Web.Mvc"  />
     <add  namespace = "System.Web.Mvc.Ajax"  />
     <add  namespace = "System.Web.Mvc.Html"  />
     <add  namespace = "System.Web.Routing"  />
   </namespaces>
</pages>

  如果把 Views 下的 web.config 文件刪除后,就會報以下錯誤

    這是因為在訪問一個視圖頁面,例如/Home/Index的時候,視圖引擎就會編譯這個Index視圖,當編譯的時候會發現,找到了視圖,它不知編譯完的這個前端頁面類的父類到底是誰。

   由此可知:View文件夾下面的web.config文件的作用是告訴視圖引擎如何編譯視圖的前台頁面類,以及制定當前頁面類的父類為WebViewPag,一般情況下,這個web.config里面的配置不需要我們手動的更改任何東西,也不能刪除

 

轉自:http://www.cnblogs.com/wisdo/p/5656205.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM