摘要:ASP.NET MVC3 候選發佈版發佈
原文發表位置: Announcing the ASP.NET MVC 3 Release Candidate
原文發表時間: October 15, 2010 12:14 AM
今天(2010-10-25)早上,ASP.NET團隊發佈了ASP.NET MVC 3 Release Candidate (RC) 。你可以從這裡下載。
ASP.NET MVC 3是一個非常酷的發佈版, 增加了很多新功能和改良。 它還與ASP.NET MVC V1和V2向後相容——從而能更容易地升級現有的應用(請閱讀發佈注意事項獲知詳細步驟)。你能從我之前發表的幾篇文章中獲知ASP.Net MVC 3中所支援的一些很棒的功能:
- Razor 介紹——ASP.NET中的新繪製引擎(7月份)
- ASP.Net MVC 3第一個預覽版(7月份)
- ASP.Net MVC 3 beta(10月份)
- ASP.NET MVC 3: Razor中的新@model關鍵字(10月份)
- ASP.NET MVC 3:透過Razor實現排版(10月份)
今天發佈的ASP.NET MVC 3 RC版本包括幾處基礎新增功能改良(和缺陷修復,工具改進, 效能改善等等)。這篇文章涵蓋今天的發佈版中的一些獨特的改進。 請閱讀我之前的一些文章以獲知更多ASP.Net MVC 3相對於之前的預覽版/Beta版所引進的一些別的功能和改進。
Visual Studio中的Razor intellisense
Visual Studio和免費Visual Web Developer Express中支援基於Razor的 View 模板的彩色化與intellisense。
當編輯基於Razor的 View 模板的時候,intellisense支援HTML,C#,VB,Javascript和CSS:
你能得到完整的C#/VB程式碼intellisense——包括HTML 輔助函數用到的(所有ASP.NET MVC 中現有的Html輔助函數也能和基於Razor的 View 模板一起使用)。
我們還提供對Razor關鍵字和指令的intellisense:
注意下面在設置@model指令為 Product 後,如何正確輸入強型別HTML輔助函數以提供一個「product」類別的intellisense:
我們仍然在對編輯器做最後的性能最佳化(有幾個最佳化不在今天的版本中)。如果你遇到intellisense不起作用或比預期慢的情況——請發一個重現步驟給我們,以供我們在最新版本中驗證是否已經修復。
NuGet 套件管理器
我上個月寫了一篇關於新的免費開放原始碼套件管理器的文章——那時稱作「NuPack」。自那之後我們更名為「NuGet」。今天的ASP.Net MVC3 發佈版將其作為一部分自動安裝。
你能用NuGet很容易地在你的專案中下載安裝商業和開放原始碼的程式庫。比如,安裝別人建立的NHibernate 和LINQ 擴充包,我能在Visual Studio內的NuGet套件管理器控制台輸入「install-package NHibernate.Linq」:
回車後,NuGet將自動去下載所有的程式庫(和他們所有的依賴項),並在我的ASP.NET MVC3專案中安裝以供使用:
在NuGet套件 Feed 中有成百個開放原始碼.NET 程式庫, 這個列表還將隨時間繼續增長。
我們認為NuGet能讓所有的.NET開發人員更容易地在社區利用和分享功能, 更好地開發.NET 應用程式。
觀看Scott Hanselman的PDC 講演
Scott Hanselman在今年的PDC上做了一個稱之為「ASP.NET+封裝套件+開放原始碼=絕世美味」的評分最高的演講。這個演講中「沒有幻燈片」,Demo如何用ASP.NET MVC 3,NuGet, EF Code First,SQLCE 和一些別的很棒的東西從頭至尾地編出一個應用程式。
你能線上觀看或下載(從下面的連結之一點右鍵,選擇「另存為」)這場講演:
我極力推薦去看看——不但有趣,而且展示了ASP.Net MVC 3中所有的部件(特別是NuGet)是如何組裝在一起的。
局部頁面輸出快取 (Partial Page Output Cache)
ASP.Net MVC 自第一版(V1)起就支援全頁回應的輸出快取。在ASP.NET MVC3中(自現在的RC起),我們還支援局部頁面快取,這允許你容易地輸出快取區域或回應的部分,而無需輸出整個頁面。在很多場景中這個功能超級有用。
頁面的一個區域的輸出快取很容易實現。簡單地將你想要輸出快取的區域封裝在一個你呈現的 View 所呼叫的子操作中就可以了。 比如, 下面我有一個商品列表頁面,我想要在頁面上也輸出一個「每日特價」部分:
上面我使用Html.Action()輔助函數去調用SalesController.DailySpecials()子操作方法。 注意上面我傳入了一個 Product 型別參數——這可以讓我根據用戶所在瀏覽的商品型別來客制我顯示的「每日特價」(那樣如果他們瀏覽「計算機」商品,我能顯示一列計算機類特價商品, 如果他們在瀏覽「嬰兒用品」,我能顯示尿布特價商品)。
下面是SalesControllers.DailySpecials()方法的簡單實現。 它傳回一列合適的商品,然後用Razor的局部View模板呈現回應結果。
注意上面的DailySpecials方法有一個[OutputCaches]屬性。 這表明它呈現的局部內容應該被快取(按每小時3600秒)。我們還想說明的是快取內容會根據目錄參數的不同而不同。
如果你有10種商品, 我們的DailySpecials方法將會快取10種不同的特價列表——根據用戶所瀏覽的商品種類的不同,會輸出合適的特價商品列表。重要的是:如果局部內容用在輸出快取之外,將不會有資料庫存取或資料處理邏輯——這將會減輕伺服器的負擔,加速回應。
這個新機制提供了一種非常乾淨而簡單的方法來往你的應用程式中添加局部頁面輸出快取。
隱藏的Javascipt和驗證
我在我的關於首個ASP.NET V3預覽版的文章中講到ASP.NET MVC 3中引進的一些驗證與Javascript/AJAX改進。
ASP.NET MVC V3中一個不錯的增強是ASP.NET MVC中的AJAX和驗證輔助函數, 現在這兩個都預設用隱藏的javascript方式。 隱藏的javascript防止線上Javascript注入Hmtl markup,用新的HTML 5 "Data-" 規範(在老的瀏覽器上——包括IE6——也能用)來代替,實現更乾淨的行為分離。這使你的HTML更小,更乾淨,從而更容易地有選擇地換掉或定制JS 庫檔案。 ASP.NET MVC 3中的驗證輔助函數現在也預設使用jQueryValidate外掛。
客戶端預設開啟驗證
在ASP.Net MVC的前幾個版本(包括上個月的ASP.Net MVC V3 beta版)中,你需要在你的View中顯式調用html.EnableClientValidation()來開啟客戶端驗證。 自現在的這個RC版本開始,那個操作已經不需要了, 客戶端驗證(用一種unobtrusive方式)預設自動開啟(需要的話,你可以透過web.config中一個設置關閉驗證)。
要讓客戶端驗證開啟,你還需要在你的網站引用合適的jQuery+jQuery驗證庫。 因為你是顯式地引用Javascript檔案,所以你能選擇在你自己的伺服器上提供,或從CDN(像微軟的或谷歌的)引用。
遠程驗證器
今天的RC版中所支援的另一個新增驗證功能是一個能讓你利用jQuery驗證外掛的遠程驗證器支援的新[Remote]驗證屬性。 透過客戶端驗證庫自動調用你在伺服端定義的定制函數來實現只能在伺服端執行的驗證邏輯。它為像這樣的客戶端驗證體驗中提供了一個非常乾淨的集成場景的方式。
具體請求驗證
ASP.Net MVC有一個內建請求驗證支援來幫助自動防止XSS和HTML注入攻擊。 然而有時候在一些你想要用戶能發表HTML的場景(b比如:部落格撰寫或編輯CMS 內容)中希望能明確化關係請求驗證。
你現在能往模型或View模型中添加一個[SkipRequestValidation]屬性來關閉模型繫結時基於每個屬性(per-property)的的請求驗證:
在你的模型、View模型中添加的上述屬性只需設置一次,並應用到所有場景中:
RC中的其他改進
下面是今天的RC版本中其他不錯的改進的一個部分列表:
改進的「新專案」對話框
建立一個ASP.Net MVC 3專案的時候你會看到下面這樣的對話框:
上面的對話框是可擴展的, 你能添加新的起動模板,繪製引擎和單元測試專案框架。假以時日,我們將發佈另外的起動模板,讓新專案的起動和執行更容易。
推斷改進
預設ASP.Net MVC推斷(scaffold)模板中包含一些小的但是很不錯的改進。 那些模板現在能更好地在模型上指定ID/主鍵屬性,並很恰當地處理他們(比如:他們現在為編輯、刪除等等建立合適的連結)。現在也預設使用Html.EditorFor()來建立、編輯基架而不是用Html.TextBoxFor()——這樣你能更容易地定制、設計你的模型介面。
新增-View對話框改進
當你使用添加->View對話框去添加一個強型別的View的時候, 會發現添加-View對話框現在過濾掉了很多非應用型別, 而且是按一種讓你能更容易地找到目標View的方式排序、組織的。
更少會話的控制器支援
你現在能指定是否需要一個使用會話狀態的控制類——如果是的話你是需要它是讀寫的還是唯讀的。
預設Razor模型動態
如果你不在你的RazorView中不指定一個@model指令, 頁面上的「Model」屬性將預設預設設置為動態(Dynamic)而不是對像(object)。這使你能根據模型型別實現後期繫結。在做這個之前你必須在檔案的頂端添加一個「@model dynamic」。
Html.LabelFor()與Html.LabelForModel()的新多載
為LabelFor()和LabelForModel()輔助函數添加了多載方法,讓你能有選擇地指定或覆蓋標籤文字。
下載
你能在這裡直接下載ASP.Net MVC 3 RC的安裝檔案。 它與VS2010和免費Visual Web Developer 2010 express都能一起使用。
請確保卸載你系統上所有之前版本的ASP.Net MVC 3發佈版(和任何可能裝有的ASP.Net 網頁安裝)。
總結
今天的Asp.Net MVC 3 RC版包含很多很不錯的功能,讓使用ASP.Net MVC 進行網路開發更加容易。如果你有關於這個版本的問題或建議,請將其發表在ASP.Net MVC 論壇或www.asp.net上。 ASP.Net MVC團隊密切關注這些論壇,應該會幫得上忙。
我們計劃在接下來的幾個星期跟蹤回饋,最佳化性能,修復最後一輪缺陷。 非常感謝您將問題發送給我們。
希望對您有所幫助。
Scott
附: 除了寫部落格之外,我現在還用Twitter進行快速更新和分享連結。 請關注我:twitter.com/scottgu