簡介
本教程基于微軟ASP.NET-MVC5官方文檔修訂而成惨篱。文中將VS版本從官方文檔的VS2013修改為2015栓拜,并且增加了基礎(chǔ)內(nèi)容姓建,縮減了高級部分缓溅,形成簡明版本蛇损,以便入門。
MVC框架的演變
- MVC1-MV4的演變可以參考如下:
- MVC5是針對之前版本的一個集大成者坛怪,幾乎完美州藕,只是不推薦跨平臺。
- MVC6是一個顛覆版本酝陈,構(gòu)建于ASP.NET5之上,為跨平臺而生毁涉。
Pre-Requirement
- Visual Studio 2015
- ASP.NET 4.6.1
- IIS 7.5+
Source Code
Quick Start
Create a New MVC Project
newProject.png
newProjectWeb.png
newProjectMVC.png
Setting IISExpress
iisExpressShowAll.png
iisExpressSetting.png
- 按F5會開始Debug沉帮,VS會直接以Attach的方式啟動IISExpress
- 按Ctrl + F5,不debug,此時可以修改源代碼穆壕,編譯后刷新Browser頁面可以應(yīng)用新代碼
- Ctrl + Alt + P: 可以Attach到指定的進程
Router
Add Router
routerGlobal.png
routerFormat.png
- 按F12待牵,可以進入定義位置
- 上圖中,url表示了Route的樣式:
- 默認的Controller是Home
- 對所有的Controller喇勋,默認的Action都是Index
- id是可選的
Controller
Add Controller
addController.png
addControllerMVC5.png
addControllerName.png
QureyString
- QueryString字符串會自動傳給Action方法對應(yīng)的形參
- 我們可以在Action方法中指定默認參數(shù)
QueryString.png
QueryStringDefault.png
- 這里的HttpUtility.HtmlEncode 也可以寫成 Server.HtmlEncode缨该,Server是HttpUtility的一個實現(xiàn)
Validate Request
- 如果我們輸入可能造成注入攻擊的內(nèi)容,可以看到頁面報錯川背,這個Request Validation機制和HtmlEncode無關(guān)贰拿,是在MiddleWare層做掉的。
RequestValidationError.png
- 如果要屏蔽此報錯熄云,可以參考MSDN膨更,請注意:
- 針對WebForm / MVC / Web Pages有不同的改法
- 該步驟適用于.NET 4.5及以上版本
Encode HTML
- 如果不使用HTMLEncode,雖然RequestValidation可以通過缴允,但我們依然無法把HtmlTag等字符注入到頁面中荚守。
HTMLEncode1.png
HTMLEncode2.png
- 使用HTMLEncode之后,就可以了
HTMLEncode3.png
View
Add View
AddView1.png
AddView2.png
Template-CSHTML
- Control通過View()方法關(guān)聯(lián)到CSHTML
cshtml1.png
cshtml2.png
- CSHTML可以直接瀏覽
cshtml3.png
- View Layout
ViewLayout1.png
ViewLayout2.png
Controller & View
- 如果View()對應(yīng)的模板文件不存在练般,會報錯
cshtml4.png
- 如何將Controller中的變量傳遞給View矗漾?
cshtml5.png
Model
Add Movie Model
- Create Model Class
AddModel1.png
AddModel2.png
- 編寫Model & DBContext
AddModel3.png
AddModel5.png
- 可以去掉無用的引用
AddModel4.png
- 在Web.config中添加Web.config
AddModel6.png
Add Movie Controller
- Add Controller
AddMovieController1.png
AddMovieController2.png
AddMovieController3.png
- 現(xiàn)在我們就可以通過WebPage操作Movie模型了
ShowMovieEditPage.png
LocalDB
- 我們可以查看AppData里的本地數(shù)據(jù)庫文件
ShowAppData1.png
ShowAppData2.png
- 在Server Explorer里可以打開MovieDBContext
VSDBContext1.png
- 點擊左邊的小三角,會自動連接上
VSDBContext2.png
- 然后可以查看表結(jié)構(gòu)和查詢數(shù)據(jù)
VSDBContext3.png
VSDBContext4.png
VSDBContext5.png
VSDBContext6.png
VSDBContext7.png
VSDBContext8.png
Publish
User Profile
- SQL Express需要Load一個user profile薄料,但IIS7.5默認是不會Load User Profile的敞贡。所以部署到IIS(IIS7.5,2008R2)后都办,LocalDB不能被直接支持嫡锌,會報錯:
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 – Local Database Runtime error occurred. Cannot create an automatic instance. See the Windows Application event log for error details.
)
- 可以參考:
- 需要在ApplicationHost.config中添加支持
<system.applicationHost>
<applicationPools>
<add name="testMVC" managedRuntimeVersion="v4.0">
<processModel loadUserProfile="true" setProfileEnvironment="true"/>
</add>
</applicationPools>
</system.applicationHost>
LocalDB Write Permisson
- IIS-AppPool賬號對LocalDB文件需要有寫權(quán)限
SetPermission1.png
SetPermission2.png