ASP.NET MVC 3.0学习系列文章--Razor and ASP.NET MVC 3.0
系列文章
ASP.NET MVC 3.0學(xué)習(xí)系列文章—序
Razor and ASP.NET MVC 3.0
ASP.NET MVC 3.0學(xué)習(xí)系列文章—Controllers in ASP.NET MVC 3.0
ASP.NET MVC 3.0學(xué)習(xí)系列文章—Model in ASP.NET MVC 3.0
?ASP.NET MVC
3.0學(xué)習(xí)系列文章--Dependency Resolution in ASP.NET MVC 3.0
這篇文章主要介紹內(nèi)容如下:
??
1.Introduction
很多文章里都有介紹Razor,園子里也有很多文章介紹。推薦大家看看ScotGu的博客看看Razor的介紹。
2.Razor’s Goals
a.Easy to use & easy to learn :
? 為什么說(shuō)Razor容易使用呢》首先是它簡(jiǎn)潔的語(yǔ)法,讓我們?cè)趯慥iew頁(yè)面時(shí)更加容易,另外你用過(guò)Razor后或者是使用它作為View Engine來(lái)發(fā)布你的網(wǎng)站或者系統(tǒng)的話,你會(huì)發(fā)現(xiàn)Razor的所有方法都單獨(dú)的放在了一個(gè)dll中,你很容易把你當(dāng)前的網(wǎng)站 view engine轉(zhuǎn)化為Razor view engine。比如你可以在你的asp.net webform項(xiàng)目中使用Razor,使用Razor語(yǔ)法來(lái)生成一些email發(fā)送的模板等。你只要有創(chuàng)造力,相信你會(huì)發(fā)現(xiàn)Razor的好用。 說(shuō)Razor容易學(xué)習(xí)是因?yàn)樗恼Z(yǔ)法相當(dāng)簡(jiǎn)單,你只要會(huì)C#,并使用過(guò)Webform View Engine,很快你就能夠?qū)W會(huì)Razor。
b.No ties to ASP.NET runtime:
沒錯(cuò),Razor不依賴asp.net runtime,它的model都是Dynamic類型的。
c.Smart:
與webform view engine 相比,Razor的語(yǔ)法更加smart,
?
3.Creating A Simpler View
現(xiàn)在我們定義一個(gè)簡(jiǎn)單的view,并輸入如下內(nèi)容:
現(xiàn)在我們未定義nicholaspei這個(gè)變量,但是還是可以通過(guò)編譯的。運(yùn)行結(jié)果:
運(yùn)行報(bào)錯(cuò),看提示信息是nicholaspei在上下文中不存在。 我們?cè)龠M(jìn)一步看看Razor是如何運(yùn)行的,看看下面的詳細(xì)錯(cuò)誤信息:
是通過(guò)C#編譯時(shí)報(bào)的異常。
再看看下面更加詳細(xì)的代碼執(zhí)行過(guò)程:
在這一行通過(guò)write來(lái)輸入nocholaspei,編譯器發(fā)現(xiàn)nicholaspei未定義,所以拋出異常。
那么如果我想輸出一個(gè)@nicholaspei如何實(shí)現(xiàn)呢?
修改View如上面代碼所示:
再次運(yùn)行:
It’s work now……..?
??
4.Intermingling Code and Markup
C#代碼和HTML代碼混合在一起。
我之前有兩篇文章是介紹Razor語(yǔ)法的,你可以去學(xué)習(xí)它來(lái)看看Razor和html標(biāo)記如何混合使用。
http://www.cnblogs.com/n-pei/archive/2011/01/13/1934149.html
http://www.cnblogs.com/n-pei/archive/2011/01/15/1936267.html
這里不再啰嗦。
5.Models and ViewData
在Razor中很多都是Dynamic類型的。
上圖是View的基類和WebViewPage的Generic類。
a.
Model類型是動(dòng)態(tài)的。
來(lái)個(gè)例子說(shuō)明:
先創(chuàng)建一個(gè)類Instructor。定義如下:
??
我們使用HomeController來(lái)返回一個(gè)IEnumerable的Instructor 集合。。。
先是準(zhǔn)備數(shù)據(jù):
Index部分的Controller部分:
View部分需要注意下,因?yàn)镸odel是Dynamic類型的。所以View的上面部分代碼如下:
整個(gè)View的代碼:
主意@model是動(dòng)態(tài)的定義好Model,然后再foreach中使用Model。
運(yùn)行結(jié)果:
還有一點(diǎn)需要注意的是這里的Html.Raw()是可以顯示html標(biāo)記的。
b.
在asp.net mvc 3中新增了ViewBag它本身也是個(gè)dynamic類型的。
我們可以看看它和ViewData有什么區(qū)別:
Controller部分我們定義如下:
View部分你就可以看出來(lái)ViewData和ViewBag的區(qū)別了。
ViewDate中l(wèi)istColors是一個(gè)object所以我們需要先轉(zhuǎn)化為L(zhǎng)ist<string>,而在ViewBag中因?yàn)長(zhǎng)istColors是Dynamic型的,所以可以直接使用。
6.HTML Helpers
目前所有的HTML Helpers都可以在Razor View Engine中使用,例如URL Helpers, AJAX Helpers,當(dāng)然還在Asp.net Mvc 3中新增了些HTML Helpers。
7.Partial Views
Partial View部分,在Razor中新增了新的Helper方法:Html.Partial(ViewName,model);
我們先定義一個(gè)View是Instructor:
修改index.cshtml,使用Html.Partial():
8.Layout Views
在Razor中的Layout.cshtml相當(dāng)于WebForm中的Master page.
其它的View主要是通過(guò)RenderBody()和RenderSection()來(lái)指定當(dāng)前View在母版的顯示位置。
這里你可以看到有個(gè)RenderSection(“header”,required:false)這行代碼,如果不添加required:false,那么你的header.cshtml這個(gè)View必須存在。
9.Startup Code
在View每次渲染前,都會(huì)執(zhí)行_ViewStart.cshtml的代碼:
??
10.Configuration
關(guān)于Razor的配置,你可以看到它會(huì)在Web.Config中有一個(gè)單獨(dú)的section來(lái)存放Razor的configuration:
如果你在其它例如web form中使用Razor,記得添加這部分配置。
PS: 希望大家提出寶貴的意見來(lái)讓我寫的東西幫助更多人,讓大家更容易理解和學(xué)習(xí)asp.net mvc 3。
Nick
?
轉(zhuǎn)載于:https://www.cnblogs.com/n-pei/archive/2011/01/23/1942711.html
總結(jié)
以上是生活随笔為你收集整理的ASP.NET MVC 3.0学习系列文章--Razor and ASP.NET MVC 3.0的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 代码练习中的bug及修改方法
- 下一篇: Spring学习(五)bean装配详解之