ASP.NET MVC小結(jié)之基礎(chǔ)篇(一)
前言:前幾天要準(zhǔn)備一個(gè)演講,所以準(zhǔn)備了MVC的一些基本的東西,以前也使用過(guò)MVC,但是只是使用,而不是去了解,所以趁著這個(gè)機(jī)會(huì)好好的把別人的MVC視頻看了一下(是一個(gè)微軟的MVP會(huì)員發(fā)布的視頻,相信有些人都看過(guò)),整理除了這個(gè)筆記,共享一下子,基本MVC的所有東西都介紹了,但是都是很基礎(chǔ)的東西。本來(lái)打算一篇發(fā)表完的,但是發(fā)現(xiàn)東西有點(diǎn)多,所以分成了兩篇文章!
什么是ASP.NET MVC
(1) ASP.NET MVC是微軟官方提供的MVC模式編寫ASP.NET Web應(yīng)用程序的一個(gè)框架
(2)MVC是微軟繼ASP.NET WebForms后的有一種開發(fā)方式,并非替代方式!
(3)官方網(wǎng)站:http://www.asp.net/mvc
(4)源碼網(wǎng)站:http://aspnet.codeplex.com/wikipage?title=MVC
ASP.NET MVC的特點(diǎn)
(1) 分離任務(wù),耦合度很低
(2)可擴(kuò)展能力很高
(3)強(qiáng)大的URL重寫(路由)機(jī)制
(4)兼容ASP.NET現(xiàn)有的技術(shù)
(5)開源
ASP.NET MVC的優(yōu)點(diǎn)
(1) 通過(guò)把項(xiàng)目分為MOdel,View和Controller,使得復(fù)雜項(xiàng)目更加容易維護(hù)
(2)沒有使用ViewState和服務(wù)器表單控件,可以更加方便的控制應(yīng)用程序的行為(可以說(shuō)回歸了原始狀態(tài))
(3)應(yīng)用程序通過(guò)Controller來(lái)控制程序請(qǐng)求,可以提供豐富的url重寫
(4)支持測(cè)試驅(qū)動(dòng)開發(fā)
(5)在團(tuán)隊(duì)模式下表現(xiàn)得更加出眾
為什么我們需要ASP.NET MVC
(1) 關(guān)注點(diǎn)分離
(2)高可擴(kuò)展性
(3)更好的可測(cè)試性
(4)更好的URL重寫
(5)更好的性能
(6)更加靈活的HTML代碼控制
ASP.NET MVC1
(1) 經(jīng)過(guò)漫長(zhǎng)的Preview和2個(gè)RC版本后,2009年3月,微軟正式發(fā)布了ASP.NET MVC1
(2)這時(shí)微軟官方在MVC領(lǐng)域的第一個(gè)WebApplication框架,帶來(lái)了與WebForm幾乎不同的開發(fā)理念
(3)但由于某些原因該版本缺失了Area等關(guān)鍵技術(shù)點(diǎn),以至于用該版本開發(fā)復(fù)雜的MVC Web應(yīng)用時(shí)會(huì)有諸多困難
ASP.NET MVC2
(1)在1.0發(fā)布后不到1年時(shí)間,ASP.NET MVC2正式發(fā)布
(2)2010年4月12日發(fā)布了VS2010和Visual Web Developer 2010正式版中內(nèi)置了對(duì)ASP.NET MVC2的擴(kuò)展
(3)ASP.NET MVC2該我們帶來(lái)了眾多期待已久的功能:如:強(qiáng)類型的HTML Helper,數(shù)據(jù)驗(yàn)證,自定義模版,Area,異步Controller等等
(4).NET 4的新技術(shù),也給ASP.NET MVC2應(yīng)用開發(fā)帶來(lái)了一些不錯(cuò)的新體驗(yàn),如:dynamic類型,帶有默認(rèn)值得方法參數(shù)等。
為什么需要ASP.NET MVC3?
(1) ASPX視圖中充斥著<%...%><%...%><%...%>
(2)Action過(guò)濾器無(wú)法全局
(3)對(duì)404,301,302等的http響應(yīng)狀態(tài),缺乏對(duì)應(yīng)的ActionResult類型
(4)缺乏模型(Model)數(shù)據(jù)驗(yàn)證的直接支持
(5)對(duì)依賴注入(DI),控制反轉(zhuǎn)(IoC)支持不夠好
(6)不支持Grid
(7)ViewData用起來(lái)有些麻煩(使用dynamic類型替代)
ASP.NET MVC3
(1) 增加Razor視圖引擎;支持多視圖引擎
(2)全局的Action過(guò)濾器
(3)新的ViewBag屬性(dynamic類型),原來(lái)是ViewData
(4)新的ActionResult類型
(5)Model Validation(Model的驗(yàn)證)
(6)JSON綁定支持
(7)dependency Injection(注入依賴)
(8)HTML5,CSS3
(9)部分也的輸出緩存
(10)HtmlHelper的增強(qiáng)
(11)NuGet(VS2010環(huán)境繼承的)
Razor視圖引擎
(1) 使用@代替<% %>
1)語(yǔ)法簡(jiǎn)單清晰
2)容易學(xué)習(xí)
3)VS2010智能提示和語(yǔ)法著色
(2)全局設(shè)定默認(rèn)布局等項(xiàng)目
全局的Action過(guò)濾器
(1) 3.0以前的寫法
[HandleError]
public class HomeController : Controller
{
......
}
(2)3.0以后的寫法:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
新的ActionResult類型
(1) HttpNotFoundResult
404
(2)RedirectResult
302\301
(3)HttpStatusCodeResult
自定義Http狀態(tài)碼
Model Validation
(1) 自驗(yàn)證
(2)客戶端驗(yàn)證
->默認(rèn)啟用客戶端驗(yàn)證
(3)遠(yuǎn)程驗(yàn)證
Razor視圖引擎概述
(1) ASP.NET MVC 3自帶了一下視圖引擎
1)ASPX
2)Razor
(2)ASP.NET MVC 3支持多視圖引擎機(jī)制
(3)可以在您指定的項(xiàng)目中自定默認(rèn)的視圖引擎
1)MVC3中自由的上述引擎
2)Spark
3)Nhaml
4)Ndjango
5)自己定義的視圖引擎
(4)Razor視圖引擎是對(duì)以代碼為焦點(diǎn)的方法實(shí)現(xiàn)
(5)特點(diǎn)
1)簡(jiǎn)介,富于表現(xiàn),流暢
->盡量減少編寫一個(gè)視圖模版所需要敲入的字符數(shù),實(shí)現(xiàn)快速流暢的編程工作。
->不必為了明確標(biāo)記出服務(wù)模塊的開始和結(jié)束而中斷編程,Razor解析器能從你的代碼中自動(dòng)推斷出來(lái)
2)易于學(xué)習(xí)
->熟悉現(xiàn)有的編程語(yǔ)言和HMTML技能就能快速學(xué)會(huì)
3)可以在任何文本編輯器中工作
4)VS2010對(duì)其增加了智能提示
5)支持單元測(cè)試
(6)簡(jiǎn)介和流暢的對(duì)比
1)ASPX引擎
<ul>
<%foreach(var p in products){%>
<li><%=p.Name%>($<%=p.Price%>)</li>
<%}%>
</ul>
2)Razor引擎
<ul id="products">
@foreach(var p in products){
<li>@p.Name($@p.Price)</li>
}
<ul>
偉大的@
(1) Razor中服務(wù)器端代碼段的起始位置均使用@符號(hào)作為開始
1)ASPX引擎
<%
int x=12;
string name="韓迎龍";
%>
2)Razor引擎
@{
int x=12;
string name="韓迎龍";
}
(2)渲染輸出
1)經(jīng)過(guò)HTML編碼(放置被攻擊)
1)ASPX引擎
<span><%:model.Message%></span>
2)Razor引擎
<span>@model.Message</span>
2)未經(jīng)HTML編碼
1)ASPX引擎
<span><%=model.Message%></span>
2)Razor引擎
<span>@Html.Raw(model.Message)</span>
(3)代碼和標(biāo)記混合
1)ASPX引擎
<%foreach(var item in items){%>
<span><%:item.Prop%></span>
<%}%>
2)Razor引擎
@foreach(var item in items){
<span>@item.Prop</span>
}
(4)代碼和純文本混合
1)ASPX引擎
<%if(foo){%>
Plain Text
<%}%>
2)Razor引擎
@if(foo){
<text>Plain Text<text>
}
@if(foo){
@:Plain Text
}
(5)<text>標(biāo)簽式一個(gè)Razor特殊處理的元素,Razor將<text>塊內(nèi)部?jī)?nèi)容視為內(nèi)容塊,不呈現(xiàn)包含那些內(nèi)容的<text>標(biāo)簽
(這意味著只呈現(xiàn)<text>內(nèi)部?jī)?nèi)容,不呈現(xiàn)標(biāo)簽本身)。這使呈現(xiàn)沒有被HTML元素包裝的多行內(nèi)容塊變得方便
(6)表達(dá)式與文本混合
1)ASPX引擎
Hello <%:title%>.<%:name%>
2)Razor引擎
Hello @title.@name
(7)Email地址
1)hyl934532778@live.cn
Razor可以自動(dòng)識(shí)別Email地址而不作為服務(wù)器端代碼執(zhí)行
(8)兩個(gè)連續(xù)的@@符號(hào)會(huì)被渲染成一個(gè)@符號(hào)
<span>I Hava A Dream,@@Kencery </span>
(9)顯示渲染輸出
1)<span>ISBN@(isbnNumber)</span>
2)當(dāng)要渲染輸出的代碼@前無(wú)空格或標(biāo)記位時(shí),我們需要使用小括號(hào)繼續(xù)您顯示的渲染輸出
(10)服務(wù)器端注釋
1)ASPX引擎
<%
I Have a Dream
%>
2)Razor引擎
@*
I Have a Dream
*@
(11)渲染輸出動(dòng)態(tài)方法
1)對(duì)于動(dòng)態(tài)方法返回值之類的輸出我們使用小括號(hào)將代碼閉合起來(lái)即可
@(MyClass.MyMethod<AType>())
(12)創(chuàng)建Razor委托
1)我們通過(guò)創(chuàng)建Razor委托來(lái)復(fù)用一些視圖邏輯
@{
Func<dynamic,object> b=
@<strong>@item</strong>
}
@b("Bold this")
(13)內(nèi)容中混合代碼
<ul>
@foreach(var p in products){
<li>
@p.ProductName
@if(p.unitsInStock==0){
@:(Out of stock)
}
else if(p.unitsInStock<4){
@:(only @p.unitsInStock Left!)
}
</li>
}
</ul>
(14)多行內(nèi)容的混合代碼
1)內(nèi)容在html標(biāo)記閉合中時(shí)
@if(p.unitsInStock==0){
<p>
Line one of Content
Line two of Content
Date is: @DateTime.Now
Line four of Content
</p>
}
(15)多行內(nèi)容混合代碼
1)內(nèi)容外部沒有html標(biāo)記包裝時(shí)
1)@if(p.unitsInStock==0){
@:Line one of Content
@:Line two of Content
@:Line four of Content
}
2)@if(p.unitsInStock==0){
<text>
Line one of Content
Line two of Content
Date is: @DateTime.Now
Line four of Content
</text>
}
為什么需要布局頁(yè)面
(1) 沒有使用布局頁(yè)時(shí),每個(gè)頁(yè)面中將大量的重復(fù)我們的核心網(wǎng)站布局代碼
1)代碼冗余
2)不利于管理
3)不利于后期的修改和維護(hù)
Razor的布局
(1) 不需要使用專門的.master文件,而統(tǒng)一使用.cshtml(VB中為.vbhtml)文件
1)布局文件名通常采用類似_Layout.cshtml的名字
(2)@RenderBody()用于標(biāo)識(shí)布局頁(yè)中可替換內(nèi)容的主題部分
(3)內(nèi)容頁(yè)中通過(guò)給頁(yè)面的Layout屬性賦值實(shí)現(xiàn)指定布局(模版)頁(yè)的文件路徑
@{
Layout="~/Views/Shared/_Layout.cshtml";
}
布局頁(yè)的預(yù)設(shè)可布局區(qū)域
(1) 通過(guò)使用@RenderSection在布局頁(yè)中預(yù)設(shè)一些區(qū)域,用于在內(nèi)容頁(yè)中使用
1)@RenderSection("head",false)
->第一個(gè)參數(shù)是Section的名字
->第二個(gè)嘗試使用來(lái)設(shè)定是否為必須填充內(nèi)容的區(qū)域
->上述代碼的含義是生命一個(gè)名字為head的非必需的內(nèi)容區(qū)域
(2)內(nèi)容頁(yè)中通過(guò)@section head{...}的方式向名為head的section中填充內(nèi)容
_ViewStart文件
(1) 在項(xiàng)目項(xiàng)目\視圖文件夾下添加一個(gè)名為
_ViewStart.cshtml(或VB的_ViewStart.vbhtml)的文件
(2)該文件用來(lái)定義想要在每次視圖呈現(xiàn)開始時(shí)執(zhí)行的通用視圖代碼,比如我們可以在該文件中聲明默認(rèn)的布局屬性
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
(3)因?yàn)檫@段代碼在每個(gè)視圖開始的時(shí)候執(zhí)行,我們不需要再任何單個(gè)視圖文件中顯示設(shè)置布局(除非我們想要覆蓋上面的默認(rèn)值).
ASPX視圖向Razor視圖的轉(zhuǎn)換
(1) 手寫一個(gè)文件一個(gè)文件的修改?
1)坑爹啊
(2)自己寫代碼用正則表達(dá)式轉(zhuǎn)換??
1)正則表達(dá)式功底不夠好
(3)那就用著名的telerick團(tuán)隊(duì)打造的RazorConverter吧!
https://github.com/telerik/razor-converter
相信自己,也許你就是下一個(gè)奇跡
- 從零開始學(xué)ASP.NET-基礎(chǔ)篇
- [ASP.NET Ajax] ECMAScript基礎(chǔ)類以及Asp.net Ajax對(duì)類<Object>的擴(kuò)展
- ASP.net基礎(chǔ)知識(shí)之常見錯(cuò)誤分析
- ASP.NET 2.0 程序安全的基礎(chǔ)知識(shí)
- ASP.NET中實(shí)現(xiàn)文件的保護(hù)性下載基礎(chǔ)篇
- ASP.NET MVC基礎(chǔ)
- ASP.NET MVC小結(jié)之基礎(chǔ)篇(二)
- ASP.NET母版頁(yè)基礎(chǔ)知識(shí)介紹
- ASP.NET 5已終結(jié),迎來(lái)ASP.NET Core 1.0和.NET Core 1.0
相關(guān)文章
基于ASP.NET實(shí)現(xiàn)單點(diǎn)登錄(SSO)的示例代碼
SSO英文全稱Single?Sign?On(單點(diǎn)登錄)。SSO是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。本文為大家分享了基于ASP.NET實(shí)現(xiàn)單點(diǎn)登錄(SSO)的示例代碼,需要的可以參考一下2022-05-05ASP.NET Core 導(dǎo)入導(dǎo)出Excel xlsx 文件實(shí)例
本篇文章主要介紹了ASP.NET Core 導(dǎo)入導(dǎo)出Excel xlsx 文件,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2016-12-12調(diào)試ASP.NET2005/2008時(shí),端口不正確的解決三套方案
這篇文章主要介紹了調(diào)試ASP.NET2005/2008時(shí),端口不正確的解決三套方案,小編就特別喜歡收藏這類文章,方便以后工作學(xué)習(xí)中遇到這類問題進(jìn)行解決。2015-09-09asp.net導(dǎo)出Excel顯示中文亂碼的解決方法
asp.net導(dǎo)出Excel顯示中文亂碼的解決方法,需要的朋友可以參考一下2013-03-03ASP.NET Core 奇技淫巧之接口代理轉(zhuǎn)發(fā)的實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET Core 奇技淫巧之接口代理轉(zhuǎn)發(fā)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08編寫的vs2005水晶報(bào)表程序在vs2008下正常使用的一些實(shí)現(xiàn)方法
以前用vs2005編寫的WEB程序,現(xiàn)在使用vs2008時(shí)總是出現(xiàn)水晶報(bào)表的錯(cuò)誤,不能使用。經(jīng)過(guò)本人實(shí)踐,總結(jié)一下錯(cuò)誤原因。2009-09-09google suggest 下拉菜單實(shí)現(xiàn)代碼(asp.net版本)
原來(lái)發(fā)表過(guò),是asp版本的,但是不支持上下鍵,現(xiàn)在后臺(tái)處理程序用.net寫的。代碼進(jìn)行部分優(yōu)化。2009-07-07