你們好,我叫李京陽,,很高興認識你們,之因此我想開一個本身的博客,就是來把本身所瞭解的知識點經過本身的話寫一下,今天我開始說一下我對MVC的認識和入門基礎,明天補上Razor語法。html
原本的意思是想 把之前的先後臺緊密聯繫的WebForm機制改變成靈活的配置方式,可是 微軟以爲 每一個控制器訪問的 Model 和視圖 若是都是用配置文件的方式的話,很麻煩。因此微軟採起了一種「約定大於配置」的理念:程序員
用戶訪問某個 控制器 裏 Action方法,就會去自動加載 同名的 視圖。設計模式
缺點:不能在運行時經過配置靈活的 修改 模型和視圖的組合關係;瀏覽器
優勢:mvc
大量的減小了程序員的配置工做;框架
自己網站的業務和頁面就是配套的,不多有共用或改變的狀況;網站
能夠 容許 程序員使用 不一樣的 視圖引擎,從而根據不一樣的業務和習慣選擇不一樣的視圖引擎提升開發效率。url
是一種用於將 具體顯示 與 業務 分離,並可以經過某種方式 靈活改變的代碼設計方式。優勢在於,用戶請求的 頁面 和 業務 能夠靈活配置,下降了頁面呈現 和 後臺業務的耦合度。.net
簡而言之:用戶請求控制器,控制器【根據配置】決定調用哪一個模型來執行業務,並將返回的數據裝入 哪一個 視圖,最後生成html代碼返回給用戶。設計
1.3視圖加載規則,經過mvc找不到視圖的錯誤,瞭解加載規則:
a.先去與控制器同名的 視圖文件夾
2.1 Controller 接收瀏覽器數據
a.獲取Get數據 :
a1:獲取路由url中配置好的制定參數:
如 配置好的路由:
瀏覽器請求路徑爲: /User/Modify/1 ,MVC框架 獲取請求後,就會找到匹配的路由映射路徑url,得知 是請求的 控制器類 User裏的 Modify 方法,此時就會檢查此方法是否包含一個 名爲 id 的參數,若是有,按照配置的url 獲取「參數」{id},並傳給此方法。
a2.直接經過請求上下文對象裏的 Request獲取 url ?後的的參數:
瀏覽器請求路徑爲:/User/UserList/1?fun=jp
控制器獲取:Request.QueryString["fun"];
b.獲取Post數據
b1.經過Request.Form["name"] 逐個獲取 表單提交的數據
b2.經過 FormCollection form逐個獲取 表單提交的數據
b3.經過 實體對象 一次性獲取 表單元素的數據,並設置到 實體對象對應的屬性中
表單中的表單元素的 屬性名稱 必須和 實體對象的屬性同樣!
查看源碼時,方法都沒有Region,因此都處於打開狀態,可使用快捷鍵
摺疊類中全部方法:ctrl+m+o
摺疊類中全部的代碼塊,包括類:ctrl+m+l
ViewData/ViewBag/TempData/Model
其中:ViewData和ViewBag本質上都是【ViewDataDictionary】類型,而且二者之間的數據共享,只不過提供了不一樣的語法操做方式而已。
在視圖代碼中使用 ViewData
在視圖代碼中使用ViewBag
注意:與ViewData同樣,都須要在使用以前轉型!
在視圖代碼中使用TempData:
u 查看源碼:
發現,只要從TempData中取出一個元素,就會當即將此元素移除!
在控制器裏的Action方法最後 調用View加載視圖的時候,將 數據對象傳入。
視圖中,能夠經過 Model屬性獲取!而且不須要轉型就能夠直接使用!
注意:Model雖然能夠不轉型就直接使用,可是 由於編譯器沒法在編譯時獲取它的類型,因此就沒法出現智能提示!爲了解決這個問題,咱們能夠在試圖的最上面經過代碼指定model類型
使用時能夠「點」出來
u 查看源碼:
當咱們在試圖上添加了 @model指令時
當前視圖就會繼承於 WebViewPage<T> 強類型視圖頁面類,而且指定T爲Student:
若是沒有添加@model指令:
當前視圖就會繼承於 WebViewPage<T> 強類型視圖頁面類,但T變成了 dynamic
4.1其實咱們的cshtml視圖頁面,在被訪問的時候,也編譯成了頁面類,
繼承於:WebViewPage<T>
4.2cshtml頁面裏的全部的代碼,都編譯到 這個類的Excute方法裏了。