asp.net MVC 模擬實現與源碼分析

前言

本文流程#1:

  從一個空項目->模擬實現一個從/Home/Test形式的URL敲入->後臺邏輯處理->傳入後臺model參數->調用razor引擎->前臺展現html

涉及到的知識點#2:

  mvc源碼 路由 razor引擎等。web

適合人羣#3:

  接觸mvc有段時間了,可是想深刻了解的人。高手就算了mvc

一.新建一個空項目:

 
由於web項目的入口是  Global.asax 。因此,咱們也新建一個:
 
F5運行程序
果真進來了,這些是前提,方便後續閱讀
 

二.訪問路徑(模擬與MVC一致)

若是咱們想訪問Home下面的Index。url爲http://localhost:11673/Home/Test.html工具

那麼首先作的就是把這個url改爲與mvc訪問方式一致的,如http://localhost:11673/Home/Testurl

那麼第一個須要講的即是路由,經過路由規則來改變指向。

看下mvc的代碼是這樣寫的,這裏即是mvc路由規則了spa

想用路由,首先要引入 System.Web.Routing.dll
 
而後在 Application_Start中添加路由映射的以下代碼,寫法以下:
 
你也許會說爲啥不跟mvc的同樣使用MapRoute啊?其實mvc對Route進行了擴展(使用擴展方法)。因此在不引入MVC庫的狀況下,是沒法使用的。
具體源碼在:System.Web.Mvc的RouteCollectionExtensions下面,有意者可前去查看。咱們後續還要參照這源碼。先貼出一小段

那麼下面咱們來訪問: http://localhost:11673/Home/Test 3d

 
出錯了,說沒有提供 ".html"  爲後綴名的提供程序。
 
須要配置一下  web.congfig ,指定處理程序
 
 
而後再次運行:
 
 
當時你會說,這只是個靜態文件啊。若是運行到這裏以前還要執行好多邏輯代碼呢
 

那麼首先想到的是轉向一個"通常處理程序"通常處理程序執行邏輯,而後拼裝html內容,再返回給前臺。

那咱們試試如何讓它指向一個Handle程序,看看參數提示:
這裏要注意 route中接收 IRouteHandle參數
那麼咱們就寫一個,其實 IRouteHandle也就是返回一個 IHttpHandler。微軟應該是爲了擴展性,又加了這麼個東西
具體實現代碼以下:
F5運行:
果真能夠啊……

好了,咱們去看看MVC是咋處理的,請看mvc的RouteConfig,並進入源碼.請順着箭頭看。本人裝了自動反編譯工具,因此看源碼很方便htm

 
其實處理過程跟咱們是同樣的……
 

那麼你又會問了,人家想要用Razor視圖啊。和後臺數據綁定多帥啊^_^……

 
那麼咱們就要引入Razor引擎了,引入dll: System.Web.Razor
請注意ProcessRequest中的處理過程。經過razor引擎編譯html代碼,注意Razor.Parse第一個參數爲:字符串內容,第二個參數爲傳入的Model。
因此輸出結果爲:"歡迎你 test"
F5運行下看看:
 
那麼再來進一步處理,在後臺寫個Students集合,綁定到指定的RazorTest.html頁面。
 注意此次咱們是跟一個頁面進行數據綁定了。是否是愈來愈像了。  看看結果,確實像所想的那樣
 
 
 
好吧,就到這裏吧。也是越說越多的,越深刻就會愈來愈深刻的(須要源碼的請索要)。閒的沒事,仍是寫寫博客吧……下節繼續吧!
相關文章
相關標籤/搜索