摘要:ASP.NET MVC 3: Razor中的新@model關鍵字
原文發表位置: ASP.NET MVC 3: New @model keyword in Razor
原文發表時間: October 15, 2010 12:14 AM
兩周之前我們發佈了ASP.NET MVC3 Beta版。它支援「立即生效」配置,包括很多不錯的改進、增強。 你能在我的Beta版發佈文章中看到關於ASP.NET MVC3中新功能的摘要。還可以閱讀我寫的關於首個ASP.NET MVC3 預覽版的文章,獲知在首個Asp.NET MVC3預覽版中出現的其他功能。
這篇文章是我將要寫的關於ASP.NET MVC3 Beta功能詳細描述的「迷你文章」系列中的第一篇。在這篇文章中,我將討論新Razor繪製引擎所支援的@model指令,它能使View檔案更簡潔乾淨。
Razor 基礎
ASP.Net MVC3配有一個名為Razor的新繪製引擎(除繼續支援、改進現有的.aspx 繪製引擎之外)。
你能從我之前的介紹Razor的文章中獲知更多關於Razor的資訊,以及引進它的原因。如果你還沒有閱讀過那篇文章,現在花幾分鐘看看吧(因為下面講的內容將假定你已經讀過了)。
一旦你讀了介紹Razor的文章,也請讀一下我的ASP.NET MVC 3預覽, 把我裡面寫的ASP.NET MVC 3 Razor的範例也過目一下。
新@model指令
我們現在看看在ASP.NET MVC3 Beta版中添加的一個新功能——@model指令。這個指令用一個簡單而乾淨的方式實現View檔案對強型別模型的引用。
想要看具體操作,讓我們來看一個簡單的場景:我們想要實現一個列出資料庫內的商品目錄的商品URL
下面用一個簡單的商品控制器(ProductController)實現商品URL。它從資料庫傳回一列商品目錄,然後將他們傳到一個View檔案,並在瀏覽器上以合適的HTML 呈現出來。
用首個ASP.Net MVC3 預覽版引用模型
如果我們已經用首個ASP.NET MVC3 預覽版使用過Razor,我們的Index.cshtmlView檔案的開端應有一個@inherit語句,表示我們希望從「System.Web.Mvc.WebViewPage<TModel>」繼承View。 我們然後要求透過傳入View模型型別強命名View檔案。
這是有用的(還在ASP.Net MVC3中支援),但是難免有點冗長。
使用ASP.NET MVC 3 Beta版和新@模型語句來引用模型
我們已經在ASP.NET MVC 3 Beta版中添加新@model指令以提供一個更乾淨簡潔的方式來指明你想要在View檔案中引用強型別模型類別。你現在只需在你的RazorView檔案的頂端寫上@model StrongModelType就行了, 再無需有一個@inherits或指定一個View基底類別:
上面的語句在概念上和之前的是一樣的(除了少了很多字元之外), 只是更容易閱讀,也更容易鍵入。
下面顯示複雜的Index.cshtmlView實現是如何呈現出來像我們上面最初的截圖那樣的:
你可能會問一個問題: 如果沒有被指定,我們的View檔案是從哪裡繼承來的? Razor將預設繼承View自System.Web.Mvc.WebViewPage<TModel> 基底類別。你也能透過更改View地址目錄下的web.config檔案選擇性覆蓋這個預設基底類別(和更改一系列預設隨View檔案一起引進的程式碼命名空間)。這使你能在View檔案中保持乾淨(也DRY)的語法,即使你想建立一個客制的View基底類別。
注意: Visual Studio 在Razor內的程式碼/標記intellisense和程式碼彩色化在本月的這個Beta版中尚不支援。但是你能在幾個星期之後看到它們——將在Razor檔案中支援針對HTML的完整程式碼intellisense,Javascipt,CSS和C#/VB撰寫程式。
總結
我們在ASP.NET MVC3 和Razor發佈中所堅持的一個主旨是讓你所寫的程式碼更乾淨,更簡潔。上面所說的@model關鍵字只是一個小小的功能,但是在讓View檔案更易讀易寫方面功不可沒。我將在以後的文章中介紹ASP.NET MVC 3 Beta版中的一些的別的類似新改進。
希望對您有所幫助。