系列文章
ASP.NET MVC 3.0學習系列文章—序
Razor and ASP.NET MVC 3.0
ASP.NET MVC 3.0學習系列文章—Controllers in ASP.NET MVC 3.0
ASP.NET MVC 3.0學習系列文章—Model in ASP.NET MVC 3.0
ASP.NET MVC
3.0學習系列文章--Dependency Resolution in ASP.NET MVC 3.0
這篇文章主要介紹內容如下:
1.Introduction
很多文章裡都有介紹Razor,園子裡也有很多文章介紹。推薦大家看看ScotGu的部落格看看Razor的介紹。
2.Razor’s Goals
a.Easy to use & easy to learn :
為什麼說Razor容易使用呢》首先是它簡潔的文法,讓我們在寫View頁面時更加容易,另外你用過Razor後或者是使用它作為View Engine來發布你的網站或者系統的話,你會發現Razor的所有方法都單獨的放在了一個dll中,你很容易把你當前的網站 view engine轉化為Razor view engine。比如你可以在你的asp.net webform項目中使用Razor,使用Razor文法來產生一些email發送的模板等。你只要有創造力,相信你會發現Razor的好用。 說Razor容易學習是因為它的文法相當簡單,你只要會C#,並使用過Webform View Engine,很快你就能夠學會Razor。
b.No ties to ASP.NET runtime:
沒錯,Razor不依賴asp.net runtime,它的model都是Dynamic類型的。
c.Smart:
與webform view engine 相比,Razor的文法更加smart,
3.Creating A Simpler View
現在我們定義一個簡單的view,並輸入如下內容:
現在我們未定義nicholaspei這個變數,但是還是可以通過編譯的。運行結果:
運行報錯,看提示資訊是nicholaspei在上下文中不存在。 我們再進一步看看Razor是如何啟動並執行,看看下面的詳細錯誤資訊:
是通過C#編譯時間報的異常。
再看看下面更加詳細的代碼執行過程:
在這一行通過write來輸入nocholaspei,編譯器發現nicholaspei未定義,所以拋出異常。
那麼如果我想輸出一個@nicholaspei如何?呢?
修改View如上面代碼所示:
再次運行:
It’s work now……..
4.Intermingling Code and Markup
C#代碼和HTML代碼混合在一起。
我之前有兩篇文章是介紹Razor文法的,你可以去學習它來看看Razor和html標記如何混合使用。
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類型是動態。
來個例子說明:
先建立一個類Instructor。定義如下:
我們使用HomeController來返回一個IEnumerable的Instructor 集合。。。
先是準備資料:
Index部分的Controller部分:
View部分需要注意下,因為Model是Dynamic類型的。所以View的上面部分代碼如下:
整個View的代碼:
主意@model是動態定義好Model,然後再foreach中使用Model。
運行結果:
還有一點需要注意的是這裡的Html.Raw()是可以顯示html標記的。
b.
在asp.net mvc 3中新增了ViewBag它本身也是個dynamic類型的。
我們可以看看它和ViewData有什麼區別:
Controller部分我們定義如下:
View部分你就可以看出來ViewData和ViewBag的區別了。
ViewDate中listColors是一個object所以我們需要先轉化為List<string>,而在ViewBag中因為ListColors是Dynamic型的,所以可以直接使用。
6.HTML Helpers
目前所有的HTML Helpers都可以在Razor View Engine中使用,例如URL Helpers, AJAX Helpers,當然還在Asp.net Mvc 3中新增了些HTML Helpers。
7.Partial Views
Partial View部分,在Razor中新增了新的Helper方法:Html.Partial(ViewName,model);
我們先定義一個View是Instructor:
修改index.cshtml,使用Html.Partial():
8.Layout Views
在Razor中的Layout.cshtml相當於WebForm中的Master page.
其它的View主要是通過RenderBody()和RenderSection()來指定當前View在母片的顯示位置。
這裡你可以看到有個RenderSection(“header”,required:false)這行代碼,如果不添加required:false,那麼你的header.cshtml這個View必須存在。
9.Startup Code
在View每次渲染前,都會執行_ViewStart.cshtml的代碼:
10.Configuration
關於Razor的配置,你可以看到它會在Web.Config中有一個單獨的section來存放Razor的configuration:
如果你在其它例如web form中使用Razor,記得添加這部分配置。
PS: 希望大家提出寶貴的意見來讓我寫的東西協助更多人,讓大家更容易理解和學習asp.net mvc 3。
Nick